mirror of
https://github.com/octoleo/plantuml.git
synced 2024-12-22 10:59:01 +00:00
version 1.2019.4
This commit is contained in:
parent
120fb859b2
commit
857ec10b8b
@ -69,7 +69,7 @@
|
||||
<jar jarfile="plantuml.jar" basedir="build">
|
||||
<manifest>
|
||||
<attribute name="Main-Class" value="net.sourceforge.plantuml.Run" />
|
||||
<attribute name="Class-Path" value="avalon-framework-4.2.0.jar batik-all-1.7.jar commons-io-1.3.1.jar commons-logging-1.0.4.jar fop.jar xml-apis-ext-1.3.04.jar xmlgraphics-commons-1.4.jar jlatexmath-minimal-1.0.3.jar jlm_cyrillic.jar jlm_greek.jar vizjs.jar j2v8_win32_x86_64-3.1.6.jar j2v8_linux_x86_64-3.1.6.jar j2v8_macosx_x86_64-3.1.6.jar" />
|
||||
<attribute name="Class-Path" value="avalon-framework-4.2.0.jar batik-all-1.7.jar commons-io-1.3.1.jar commons-logging-1.0.4.jar fop.jar xml-apis-ext-1.3.04.jar xmlgraphics-commons-1.4.jar jlatexmath-minimal-1.0.3.jar jlm_cyrillic.jar jlm_greek.jar vizjs.jar j2v8_win32_x86_64-3.1.6.jar j2v8_linux_x86_64-3.1.6.jar j2v8_macosx_x86_64-3.1.6.jar ditaa0_9.jar" />
|
||||
</manifest>
|
||||
</jar>
|
||||
<delete dir="build" />
|
||||
|
5
pom.xml
5
pom.xml
@ -30,13 +30,12 @@
|
||||
Script Author: Julien Eluard
|
||||
|
||||
-->
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>net.sourceforge.plantuml</groupId>
|
||||
<artifactId>plantuml</artifactId>
|
||||
<version>1.2019.2-SNAPSHOT</version>
|
||||
<version>1.2019.5-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>PlantUML</name>
|
||||
|
@ -48,18 +48,21 @@ import net.sourceforge.plantuml.code.TranscoderUtil;
|
||||
import net.sourceforge.plantuml.command.regex.Matcher2;
|
||||
import net.sourceforge.plantuml.core.Diagram;
|
||||
import net.sourceforge.plantuml.preproc.Defines;
|
||||
import net.sourceforge.plantuml.preproc2.PreprocessorMode;
|
||||
import net.sourceforge.plantuml.preproc2.PreprocessorModeSet;
|
||||
import net.sourceforge.plantuml.tim.TimLoader;
|
||||
import net.sourceforge.plantuml.utils.StartUtils;
|
||||
import net.sourceforge.plantuml.version.Version;
|
||||
|
||||
public class BlockUml {
|
||||
|
||||
private final List<CharSequence2> data;
|
||||
private final List<StringLocated> data;
|
||||
private Diagram system;
|
||||
private final Defines localDefines;
|
||||
private final ISkinSimple skinParam;
|
||||
|
||||
BlockUml(String... strings) {
|
||||
this(convert(strings), Defines.createEmpty(), null);
|
||||
this(convert(strings), Defines.createEmpty(), null, null);
|
||||
}
|
||||
|
||||
public String getEncodedUrl() throws IOException {
|
||||
@ -71,43 +74,47 @@ public class BlockUml {
|
||||
|
||||
public String getFlashData() {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
for (CharSequence2 line : data) {
|
||||
sb.append(line);
|
||||
for (StringLocated line : data) {
|
||||
sb.append(line.getString());
|
||||
sb.append('\r');
|
||||
sb.append(BackSlash.CHAR_NEWLINE);
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public static List<CharSequence2> convert(String... strings) {
|
||||
public static List<StringLocated> convert(String... strings) {
|
||||
return convert(Arrays.asList(strings));
|
||||
}
|
||||
|
||||
public static List<CharSequence2> convert(List<String> strings) {
|
||||
final List<CharSequence2> result = new ArrayList<CharSequence2>();
|
||||
public static List<StringLocated> convert(List<String> strings) {
|
||||
final List<StringLocated> result = new ArrayList<StringLocated>();
|
||||
LineLocationImpl location = new LineLocationImpl("block", null);
|
||||
for (String s : strings) {
|
||||
location = location.oneLineRead();
|
||||
result.add(new CharSequence2Impl(s, location));
|
||||
result.add(new StringLocated(s, location));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public BlockUml(List<CharSequence2> strings, Defines defines, ISkinSimple skinParam) {
|
||||
public BlockUml(List<StringLocated> strings, Defines defines, ISkinSimple skinParam, PreprocessorModeSet mode) {
|
||||
this.localDefines = defines;
|
||||
this.skinParam = skinParam;
|
||||
final CharSequence2 s0 = strings.get(0).trin();
|
||||
final String s0 = strings.get(0).getStringTrimmed();
|
||||
if (StartUtils.startsWithSymbolAnd("start", s0) == false) {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
this.data = new ArrayList<CharSequence2>(strings);
|
||||
if (mode != null && mode.getPreprocessorMode() == PreprocessorMode.V2_NEW_TIM) {
|
||||
this.data = new TimLoader(mode.getImportedFiles()).load(strings);
|
||||
} else {
|
||||
this.data = new ArrayList<StringLocated>(strings);
|
||||
}
|
||||
}
|
||||
|
||||
public String getFileOrDirname() {
|
||||
if (OptionFlags.getInstance().isWord()) {
|
||||
return null;
|
||||
}
|
||||
final Matcher2 m = StartUtils.patternFilename.matcher(StringUtils.trin(data.get(0).toString()));
|
||||
final Matcher2 m = StartUtils.patternFilename.matcher(StringUtils.trin(data.get(0).getString()));
|
||||
final boolean ok = m.find();
|
||||
if (ok == false) {
|
||||
return null;
|
||||
@ -137,7 +144,7 @@ public class BlockUml {
|
||||
return system;
|
||||
}
|
||||
|
||||
public final List<CharSequence2> getData() {
|
||||
public final List<StringLocated> getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
@ -145,8 +152,8 @@ public class BlockUml {
|
||||
try {
|
||||
final AsciiEncoder coder = new AsciiEncoder();
|
||||
final MessageDigest msgDigest = MessageDigest.getInstance("MD5");
|
||||
for (CharSequence s : data) {
|
||||
msgDigest.update(s.toString().getBytes("UTF-8"));
|
||||
for (StringLocated s : data) {
|
||||
msgDigest.update(s.getString().getBytes("UTF-8"));
|
||||
}
|
||||
final byte[] digest = msgDigest.digest();
|
||||
return coder.encode(digest);
|
||||
@ -166,14 +173,18 @@ public class BlockUml {
|
||||
|
||||
public boolean isStartDef(String name) {
|
||||
final String signature = "@startdef(id=" + name + ")";
|
||||
return data.get(0).toString().equalsIgnoreCase(signature);
|
||||
return data.get(0).getString().equalsIgnoreCase(signature);
|
||||
}
|
||||
|
||||
public List<? extends CharSequence> getDefinition(boolean withHeader) {
|
||||
if (withHeader) {
|
||||
return Collections.unmodifiableList(data);
|
||||
public List<String> getDefinition(boolean withHeader) {
|
||||
final List<String> data2 = new ArrayList<String>();
|
||||
for (StringLocated s : data) {
|
||||
data2.add(s.getString());
|
||||
}
|
||||
return Collections.unmodifiableList(data.subList(1, data.size() - 1));
|
||||
if (withHeader) {
|
||||
return Collections.unmodifiableList(data2);
|
||||
}
|
||||
return Collections.unmodifiableList(data2.subList(1, data2.size() - 1));
|
||||
}
|
||||
|
||||
public Defines getLocalDefines() {
|
||||
|
@ -45,30 +45,35 @@ import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.preproc.Defines;
|
||||
import net.sourceforge.plantuml.preproc.DefinesGet;
|
||||
import net.sourceforge.plantuml.preproc.FileWithSuffix;
|
||||
import net.sourceforge.plantuml.preproc.ImportedFiles;
|
||||
import net.sourceforge.plantuml.preproc.PreprocessorChangeModeReader;
|
||||
import net.sourceforge.plantuml.preproc.ReadLineNumbered;
|
||||
import net.sourceforge.plantuml.preproc.ReadLineReader;
|
||||
import net.sourceforge.plantuml.preproc.UncommentReadLine;
|
||||
import net.sourceforge.plantuml.preproc2.Preprocessor2;
|
||||
import net.sourceforge.plantuml.preproc2.Preprocessor;
|
||||
import net.sourceforge.plantuml.preproc2.PreprocessorMode;
|
||||
import net.sourceforge.plantuml.utils.StartUtils;
|
||||
|
||||
public final class BlockUmlBuilder implements DefinitionsContainer {
|
||||
|
||||
private PreprocessorMode mode = PreprocessorMode.V1_LEGACY;
|
||||
|
||||
private final List<BlockUml> blocks = new ArrayList<BlockUml>();
|
||||
private Set<FileWithSuffix> usedFiles = new HashSet<FileWithSuffix>();
|
||||
private final UncommentReadLine reader2;
|
||||
private final Defines defines;
|
||||
private final ImportedFiles importedFiles;
|
||||
|
||||
public BlockUmlBuilder(List<String> config, String charset, Defines defines, Reader reader, File newCurrentDir,
|
||||
String desc) throws IOException {
|
||||
ReadLineNumbered includer = null;
|
||||
this.defines = defines;
|
||||
try {
|
||||
reader2 = new UncommentReadLine(ReadLineReader.create(reader, desc));
|
||||
includer = new Preprocessor2(config, reader2, charset, defines, this,
|
||||
ImportedFiles.createImportedFiles(new AParentFolderRegular(newCurrentDir)));
|
||||
this.reader2 = new UncommentReadLine(new PreprocessorChangeModeReader(ReadLineReader.create(reader, desc),
|
||||
this));
|
||||
this.importedFiles = ImportedFiles.createImportedFiles(new AParentFolderRegular(newCurrentDir));
|
||||
includer = new Preprocessor(config, reader2, charset, defines, this, importedFiles);
|
||||
init(includer);
|
||||
} finally {
|
||||
if (includer != null) {
|
||||
@ -83,41 +88,41 @@ public final class BlockUmlBuilder implements DefinitionsContainer {
|
||||
}
|
||||
|
||||
private void init(ReadLineNumbered includer) throws IOException {
|
||||
CharSequence2 s = null;
|
||||
List<CharSequence2> current2 = null;
|
||||
StringLocated s = null;
|
||||
List<StringLocated> current2 = null;
|
||||
boolean paused = false;
|
||||
|
||||
while ((s = includer.readLine()) != null) {
|
||||
if (StartUtils.isArobaseStartDiagram(s)) {
|
||||
current2 = new ArrayList<CharSequence2>();
|
||||
if (StartUtils.isArobaseStartDiagram(s.getString())) {
|
||||
current2 = new ArrayList<StringLocated>();
|
||||
paused = false;
|
||||
}
|
||||
if (StartUtils.isArobasePauseDiagram(s)) {
|
||||
if (StartUtils.isArobasePauseDiagram(s.getString())) {
|
||||
paused = true;
|
||||
reader2.setPaused(true);
|
||||
}
|
||||
if (StartUtils.isExit(s)) {
|
||||
if (StartUtils.isExit(s.getString())) {
|
||||
paused = true;
|
||||
reader2.setPaused(true);
|
||||
}
|
||||
if (current2 != null && paused == false) {
|
||||
current2.add(s);
|
||||
} else if (paused) {
|
||||
final CharSequence2 append = StartUtils.getPossibleAppend(s);
|
||||
final StringLocated append = StartUtils.getPossibleAppend(s);
|
||||
if (append != null) {
|
||||
current2.add(append);
|
||||
}
|
||||
}
|
||||
|
||||
if (StartUtils.isArobaseUnpauseDiagram(s)) {
|
||||
if (StartUtils.isArobaseUnpauseDiagram(s.getString())) {
|
||||
paused = false;
|
||||
reader2.setPaused(false);
|
||||
}
|
||||
if (StartUtils.isArobaseEndDiagram(s) && current2 != null) {
|
||||
if (StartUtils.isArobaseEndDiagram(s.getString()) && current2 != null) {
|
||||
if (paused) {
|
||||
current2.add(s);
|
||||
}
|
||||
blocks.add(new BlockUml(current2, defines.cloneMe(), null));
|
||||
blocks.add(new BlockUml(current2, defines.cloneMe(), null, this));
|
||||
current2 = null;
|
||||
reader2.setPaused(false);
|
||||
}
|
||||
@ -132,7 +137,7 @@ public final class BlockUmlBuilder implements DefinitionsContainer {
|
||||
return Collections.unmodifiableSet(usedFiles);
|
||||
}
|
||||
|
||||
public List<? extends CharSequence> getDefinition(String name) {
|
||||
public List<String> getDefinition(String name) {
|
||||
for (BlockUml block : blocks) {
|
||||
if (block.isStartDef(name)) {
|
||||
this.defines.importFrom(block.getLocalDefines());
|
||||
@ -142,4 +147,16 @@ public final class BlockUmlBuilder implements DefinitionsContainer {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
public PreprocessorMode getPreprocessorMode() {
|
||||
return mode;
|
||||
}
|
||||
|
||||
public void setPreprocessorMode(PreprocessorMode mode) {
|
||||
this.mode = mode;
|
||||
}
|
||||
|
||||
public final ImportedFiles getImportedFiles() {
|
||||
return importedFiles;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -37,8 +37,10 @@ package net.sourceforge.plantuml;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface DefinitionsContainer {
|
||||
import net.sourceforge.plantuml.preproc2.PreprocessorModeSet;
|
||||
|
||||
public List<? extends CharSequence> getDefinition(String name);
|
||||
public interface DefinitionsContainer extends PreprocessorModeSet {
|
||||
|
||||
public List<String> getDefinition(String name);
|
||||
|
||||
}
|
||||
|
@ -40,6 +40,7 @@ import java.awt.image.BufferedImage;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
@ -84,6 +85,10 @@ public class EmbeddedDiagram implements CharSequence {
|
||||
private BufferedImage image;
|
||||
private final ISkinSimple skinParam;
|
||||
|
||||
public List<Atom> splitInTwo(StringBounder stringBounder, double width) {
|
||||
throw new UnsupportedOperationException(getClass().toString());
|
||||
}
|
||||
|
||||
private Draw(ISkinSimple skinParam) {
|
||||
this.skinParam = skinParam;
|
||||
}
|
||||
@ -155,7 +160,7 @@ public class EmbeddedDiagram implements CharSequence {
|
||||
}
|
||||
|
||||
private Diagram getSystem() throws IOException, InterruptedException {
|
||||
final BlockUml blockUml = new BlockUml(system.as2(), Defines.createEmpty(), skinParam);
|
||||
final BlockUml blockUml = new BlockUml(system.as2(), Defines.createEmpty(), skinParam, null);
|
||||
return blockUml.getDiagram();
|
||||
|
||||
}
|
||||
|
@ -47,7 +47,7 @@ import net.sourceforge.plantuml.graphic.StringBounder;
|
||||
* @author Arnaud Roques
|
||||
*
|
||||
*/
|
||||
public class FileFormatOption implements Serializable {
|
||||
public final class FileFormatOption implements Serializable {
|
||||
|
||||
private final FileFormat fileFormat;
|
||||
private final AffineTransform affineTransform;
|
||||
@ -56,9 +56,14 @@ public class FileFormatOption implements Serializable {
|
||||
private final String svgLinkTarget;
|
||||
private final String hoverColor;
|
||||
private final TikzFontDistortion tikzFontDistortion;
|
||||
private final double scale;
|
||||
|
||||
public double getScaleCoef() {
|
||||
return scale;
|
||||
}
|
||||
|
||||
public FileFormatOption(FileFormat fileFormat) {
|
||||
this(fileFormat, null, true, false, "_top", false, null, TikzFontDistortion.getDefault());
|
||||
this(fileFormat, null, true, false, "_top", false, null, TikzFontDistortion.getDefault(), 1.0);
|
||||
}
|
||||
|
||||
public StringBounder getDefaultStringBounder() {
|
||||
@ -74,11 +79,12 @@ public class FileFormatOption implements Serializable {
|
||||
}
|
||||
|
||||
public FileFormatOption(FileFormat fileFormat, boolean withMetadata) {
|
||||
this(fileFormat, null, false, false, "_top", false, null, TikzFontDistortion.getDefault());
|
||||
this(fileFormat, null, false, false, "_top", false, null, TikzFontDistortion.getDefault(), 1.0);
|
||||
}
|
||||
|
||||
private FileFormatOption(FileFormat fileFormat, AffineTransform at, boolean withMetadata, boolean useRedForError,
|
||||
String svgLinkTarget, boolean debugsvek, String hoverColor, TikzFontDistortion tikzFontDistortion) {
|
||||
String svgLinkTarget, boolean debugsvek, String hoverColor, TikzFontDistortion tikzFontDistortion,
|
||||
double scale) {
|
||||
this.hoverColor = hoverColor;
|
||||
this.fileFormat = fileFormat;
|
||||
this.affineTransform = at;
|
||||
@ -87,6 +93,7 @@ public class FileFormatOption implements Serializable {
|
||||
this.svgLinkTarget = svgLinkTarget;
|
||||
this.debugsvek = debugsvek;
|
||||
this.tikzFontDistortion = tikzFontDistortion;
|
||||
this.scale = scale;
|
||||
if (tikzFontDistortion == null) {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
@ -94,22 +101,27 @@ public class FileFormatOption implements Serializable {
|
||||
|
||||
public FileFormatOption withUseRedForError() {
|
||||
return new FileFormatOption(fileFormat, affineTransform, withMetadata, true, svgLinkTarget, debugsvek,
|
||||
hoverColor, tikzFontDistortion);
|
||||
hoverColor, tikzFontDistortion, scale);
|
||||
}
|
||||
|
||||
public FileFormatOption withTikzFontDistortion(TikzFontDistortion tikzFontDistortion) {
|
||||
return new FileFormatOption(fileFormat, affineTransform, withMetadata, true, svgLinkTarget, debugsvek,
|
||||
hoverColor, tikzFontDistortion);
|
||||
hoverColor, tikzFontDistortion, scale);
|
||||
}
|
||||
|
||||
public FileFormatOption withSvgLinkTarget(String svgLinkTarget) {
|
||||
return new FileFormatOption(fileFormat, affineTransform, withMetadata, useRedForError, svgLinkTarget,
|
||||
debugsvek, hoverColor, tikzFontDistortion);
|
||||
debugsvek, hoverColor, tikzFontDistortion, scale);
|
||||
}
|
||||
|
||||
public FileFormatOption withHoverColor(String hoverColor) {
|
||||
return new FileFormatOption(fileFormat, affineTransform, withMetadata, useRedForError, svgLinkTarget,
|
||||
debugsvek, hoverColor, tikzFontDistortion);
|
||||
debugsvek, hoverColor, tikzFontDistortion, scale);
|
||||
}
|
||||
|
||||
public FileFormatOption withScale(double scale) {
|
||||
return new FileFormatOption(fileFormat, affineTransform, withMetadata, useRedForError, svgLinkTarget,
|
||||
debugsvek, hoverColor, tikzFontDistortion, scale);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -152,7 +152,9 @@ public class FileUtils {
|
||||
// return ImageIO.read(f);
|
||||
// }
|
||||
|
||||
public static BufferedImage ImageIO_read(File f) {
|
||||
// http://forum.plantuml.net/9048/img-tag-for-sequence-diagram-participants-does-always-render
|
||||
|
||||
public synchronized static BufferedImage ImageIO_read(File f) {
|
||||
// https://www.experts-exchange.com/questions/26171948/Why-are-ImageIO-read-images-losing-their-transparency.html
|
||||
// https://stackoverflow.com/questions/18743790/can-java-load-images-with-transparency
|
||||
|
||||
@ -163,7 +165,7 @@ public class FileUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public static BufferedImage ImageIO_read(URL url) {
|
||||
public synchronized static BufferedImage ImageIO_read(URL url) {
|
||||
try {
|
||||
return readImage(new ImageIcon(url));
|
||||
} catch (Exception e) {
|
||||
@ -171,7 +173,7 @@ public class FileUtils {
|
||||
}
|
||||
}
|
||||
|
||||
private static BufferedImage readImage(final ImageIcon imageIcon) {
|
||||
private synchronized static BufferedImage readImage(final ImageIcon imageIcon) {
|
||||
final Image tmpImage = imageIcon.getImage();
|
||||
final BufferedImage image = new BufferedImage(imageIcon.getIconWidth(), imageIcon.getIconHeight(),
|
||||
BufferedImage.TYPE_INT_ARGB);
|
||||
|
@ -90,6 +90,7 @@ public enum FontParam {
|
||||
SEQUENCE_GROUP(11, Font.BOLD), //
|
||||
SEQUENCE_GROUP_HEADER(13, Font.BOLD), //
|
||||
PARTICIPANT(14, Font.PLAIN), //
|
||||
PARTICIPANT_STEREOTYPE(14, Font.ITALIC), //
|
||||
SEQUENCE_TITLE(14, Font.BOLD), //
|
||||
STATE(14, Font.PLAIN), //
|
||||
STATE_ATTRIBUTE(12, Font.PLAIN), //
|
||||
|
100
src/net/sourceforge/plantuml/Guillemet.java
Normal file
100
src/net/sourceforge/plantuml/Guillemet.java
Normal file
@ -0,0 +1,100 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009-2020, Arnaud Roques
|
||||
*
|
||||
* Project Info: http://plantuml.com
|
||||
*
|
||||
* If you like this project or if you find it useful, you can support us at:
|
||||
*
|
||||
* http://plantuml.com/patreon (only 1$ per month!)
|
||||
* http://plantuml.com/paypal
|
||||
*
|
||||
* This file is part of PlantUML.
|
||||
*
|
||||
* PlantUML is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* PlantUML distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
* USA.
|
||||
*
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml;
|
||||
|
||||
import java.util.StringTokenizer;
|
||||
import java.util.regex.Matcher;
|
||||
|
||||
public class Guillemet {
|
||||
|
||||
public static final Guillemet NONE = new Guillemet("", "");
|
||||
public static final Guillemet DOUBLE_COMPARATOR = new Guillemet("<<", ">>");
|
||||
public static final Guillemet GUILLEMET = new Guillemet("\u00AB", "\u00BB");
|
||||
|
||||
private final String start;
|
||||
private final String end;
|
||||
|
||||
public Guillemet fromDescription(String value) {
|
||||
if (value != null) {
|
||||
if ("false".equalsIgnoreCase(value)) {
|
||||
return Guillemet.DOUBLE_COMPARATOR;
|
||||
}
|
||||
if ("<< >>".equalsIgnoreCase(value)) {
|
||||
return Guillemet.DOUBLE_COMPARATOR;
|
||||
}
|
||||
if ("none".equalsIgnoreCase(value)) {
|
||||
return Guillemet.NONE;
|
||||
}
|
||||
if (value.contains(" ")) {
|
||||
final StringTokenizer st = new StringTokenizer(value, " ");
|
||||
return new Guillemet(st.nextToken(), st.nextToken());
|
||||
}
|
||||
}
|
||||
return Guillemet.GUILLEMET;
|
||||
}
|
||||
|
||||
private Guillemet(String start, String end) {
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
|
||||
}
|
||||
|
||||
public String manageGuillemet(String st) {
|
||||
if (this == DOUBLE_COMPARATOR) {
|
||||
return st;
|
||||
}
|
||||
return st.replaceAll("\\<\\<\\s?((?:\\<&\\w+\\>|[^<>])+?)\\s?\\>\\>", Matcher.quoteReplacement(start) + "$1"
|
||||
+ Matcher.quoteReplacement(end));
|
||||
}
|
||||
|
||||
public String manageGuillemetStrict(String st) {
|
||||
if (this == DOUBLE_COMPARATOR) {
|
||||
return st;
|
||||
}
|
||||
if (st.startsWith("<< ")) {
|
||||
st = start + st.substring(3);
|
||||
} else if (st.startsWith("<<")) {
|
||||
st = start + st.substring(2);
|
||||
}
|
||||
if (st.endsWith(" >>")) {
|
||||
st = st.substring(0, st.length() - 3) + end;
|
||||
} else if (st.endsWith(">>")) {
|
||||
st = st.substring(0, st.length() - 2) + end;
|
||||
}
|
||||
return st;
|
||||
}
|
||||
|
||||
}
|
@ -125,7 +125,7 @@ public interface ISkinParam extends ISkinSimple {
|
||||
|
||||
public int groupInheritance();
|
||||
|
||||
public boolean useGuillemet();
|
||||
public Guillemet guillemet();
|
||||
|
||||
public boolean handwritten();
|
||||
|
||||
|
@ -64,8 +64,8 @@ public class LineLocationImpl implements LineLocation {
|
||||
}
|
||||
|
||||
public static LineLocation fromLine(CharSequence cs) {
|
||||
if (cs instanceof CharSequence2) {
|
||||
return ((CharSequence2) cs).getLocation();
|
||||
if (cs instanceof StringLocated) {
|
||||
return ((StringLocated) cs).getLocation();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
@ -50,7 +50,6 @@ import net.sourceforge.plantuml.core.Diagram;
|
||||
import net.sourceforge.plantuml.core.DiagramType;
|
||||
import net.sourceforge.plantuml.core.UmlSource;
|
||||
import net.sourceforge.plantuml.creole.PSystemCreoleFactory;
|
||||
import net.sourceforge.plantuml.cute.PSystemCuteFactory;
|
||||
import net.sourceforge.plantuml.dedication.PSystemDedicationFactory;
|
||||
import net.sourceforge.plantuml.definition.PSystemDefinitionFactory;
|
||||
import net.sourceforge.plantuml.descdiagram.DescriptionDiagramFactory;
|
||||
@ -62,16 +61,12 @@ import net.sourceforge.plantuml.eggs.PSystemAppleTwoFactory;
|
||||
import net.sourceforge.plantuml.eggs.PSystemCharlieFactory;
|
||||
import net.sourceforge.plantuml.eggs.PSystemColorsFactory;
|
||||
import net.sourceforge.plantuml.eggs.PSystemEggFactory;
|
||||
import net.sourceforge.plantuml.eggs.PSystemLostFactory;
|
||||
import net.sourceforge.plantuml.eggs.PSystemPathFactory;
|
||||
import net.sourceforge.plantuml.eggs.PSystemRIPFactory;
|
||||
import net.sourceforge.plantuml.eggs.PSystemWelcomeFactory;
|
||||
import net.sourceforge.plantuml.flowdiagram.FlowDiagramFactory;
|
||||
import net.sourceforge.plantuml.font.PSystemListFontsFactory;
|
||||
import net.sourceforge.plantuml.help.HelpFactory;
|
||||
import net.sourceforge.plantuml.jcckit.PSystemJcckitFactory;
|
||||
import net.sourceforge.plantuml.jungle.PSystemTreeFactory;
|
||||
import net.sourceforge.plantuml.logo.PSystemLogoFactory;
|
||||
import net.sourceforge.plantuml.math.PSystemLatexFactory;
|
||||
import net.sourceforge.plantuml.math.PSystemMathFactory;
|
||||
import net.sourceforge.plantuml.mindmap.MindMapDiagramFactory;
|
||||
@ -79,7 +74,6 @@ import net.sourceforge.plantuml.nwdiag.NwDiagramFactory;
|
||||
import net.sourceforge.plantuml.openiconic.PSystemListOpenIconicFactory;
|
||||
import net.sourceforge.plantuml.openiconic.PSystemOpenIconicFactory;
|
||||
import net.sourceforge.plantuml.oregon.PSystemOregonFactory;
|
||||
import net.sourceforge.plantuml.postit.PostIdDiagramFactory;
|
||||
import net.sourceforge.plantuml.project3.GanttDiagramFactory;
|
||||
import net.sourceforge.plantuml.salt.PSystemSaltFactory;
|
||||
import net.sourceforge.plantuml.sequencediagram.SequenceDiagramFactory;
|
||||
@ -91,22 +85,23 @@ import net.sourceforge.plantuml.ugraphic.sprite.PSystemListInternalSpritesFactor
|
||||
import net.sourceforge.plantuml.version.License;
|
||||
import net.sourceforge.plantuml.version.PSystemLicenseFactory;
|
||||
import net.sourceforge.plantuml.version.PSystemVersionFactory;
|
||||
import net.sourceforge.plantuml.wbs.WBSDiagramFactory;
|
||||
|
||||
public class PSystemBuilder {
|
||||
|
||||
public static final long startTime = System.currentTimeMillis();
|
||||
|
||||
final public Diagram createPSystem(ISkinSimple skinParam, final List<CharSequence2> strings2) {
|
||||
final public Diagram createPSystem(ISkinSimple skinParam, final List<StringLocated> strings2) {
|
||||
|
||||
final long now = System.currentTimeMillis();
|
||||
|
||||
Diagram result = null;
|
||||
try {
|
||||
final DiagramType type = DiagramType.getTypeFromArobaseStart(strings2.get(0).toString2());
|
||||
final DiagramType type = DiagramType.getTypeFromArobaseStart(strings2.get(0).getString());
|
||||
final UmlSource umlSource = new UmlSource(strings2, type == DiagramType.UML);
|
||||
|
||||
// int cpt = 0;
|
||||
for (CharSequence2 s : strings2) {
|
||||
for (StringLocated s : strings2) {
|
||||
if (s.getPreprocessorError() != null) {
|
||||
Log.error("Preprocessor Error: " + s.getPreprocessorError());
|
||||
final ErrorUml err = new ErrorUml(ErrorUmlType.SYNTAX_ERROR, s.getPreprocessorError(), /* cpt */
|
||||
@ -153,10 +148,8 @@ public class PSystemBuilder {
|
||||
factories.add(new StateDiagramFactory());
|
||||
factories.add(new ActivityDiagramFactory3());
|
||||
factories.add(new CompositeDiagramFactory());
|
||||
// factories.add(new ObjectDiagramFactory());
|
||||
factories.add(new BpmDiagramFactory(DiagramType.BPM));
|
||||
factories.add(new PostIdDiagramFactory());
|
||||
// factories.add(new PrintSkinFactory());
|
||||
// factories.add(new PostIdDiagramFactory());
|
||||
factories.add(new PSystemLicenseFactory());
|
||||
factories.add(new PSystemVersionFactory());
|
||||
factories.add(new PSystemDonorsFactory());
|
||||
@ -171,12 +164,13 @@ public class PSystemBuilder {
|
||||
factories.add(new PSystemDotFactory(DiagramType.UML));
|
||||
factories.add(new NwDiagramFactory());
|
||||
factories.add(new MindMapDiagramFactory());
|
||||
factories.add(new WBSDiagramFactory());
|
||||
factories.add(new PSystemDitaaFactory(DiagramType.DITAA));
|
||||
factories.add(new PSystemDitaaFactory(DiagramType.UML));
|
||||
if (License.getCurrent() == License.GPL || License.getCurrent() == License.GPLV2) {
|
||||
factories.add(new PSystemDitaaFactory(DiagramType.DITAA));
|
||||
factories.add(new PSystemDitaaFactory(DiagramType.UML));
|
||||
factories.add(new PSystemJcckitFactory(DiagramType.JCCKIT));
|
||||
factories.add(new PSystemJcckitFactory(DiagramType.UML));
|
||||
factories.add(new PSystemLogoFactory());
|
||||
// factories.add(new PSystemLogoFactory());
|
||||
factories.add(new PSystemSudokuFactory());
|
||||
}
|
||||
factories.add(new PSystemDefinitionFactory());
|
||||
@ -187,8 +181,8 @@ public class PSystemBuilder {
|
||||
factories.add(new PSystemEggFactory());
|
||||
factories.add(new PSystemAppleTwoFactory());
|
||||
factories.add(new PSystemRIPFactory());
|
||||
factories.add(new PSystemLostFactory());
|
||||
factories.add(new PSystemPathFactory());
|
||||
// factories.add(new PSystemLostFactory());
|
||||
// factories.add(new PSystemPathFactory());
|
||||
factories.add(new PSystemOregonFactory());
|
||||
factories.add(new PSystemCharlieFactory());
|
||||
if (License.getCurrent() == License.GPL || License.getCurrent() == License.GPLV2) {
|
||||
@ -197,8 +191,8 @@ public class PSystemBuilder {
|
||||
factories.add(new GanttDiagramFactory(DiagramType.GANTT));
|
||||
factories.add(new GanttDiagramFactory(DiagramType.UML));
|
||||
factories.add(new FlowDiagramFactory());
|
||||
factories.add(new PSystemTreeFactory(DiagramType.JUNGLE));
|
||||
factories.add(new PSystemCuteFactory(DiagramType.CUTE));
|
||||
// factories.add(new PSystemTreeFactory(DiagramType.JUNGLE));
|
||||
// factories.add(new PSystemCuteFactory(DiagramType.CUTE));
|
||||
factories.add(new PSystemDedicationFactory());
|
||||
factories.add(new TimingDiagramFactory());
|
||||
factories.add(new HelpFactory());
|
||||
|
@ -419,11 +419,13 @@ public class PSystemError extends AbstractPSystem {
|
||||
|
||||
private List<String> getPartialCode() {
|
||||
List<String> result = new ArrayList<String>();
|
||||
for (Iterator<CharSequence2> it = getSource().iterator2(); it.hasNext();) {
|
||||
final CharSequence2 s = it.next();
|
||||
result.add(s.toString());
|
||||
if (s.getLocation().getDescription().equals(higherErrorPosition.getDescription())
|
||||
&& s.getLocation().compareTo(higherErrorPosition) >= 0) {
|
||||
for (Iterator<StringLocated> it = getSource().iterator2(); it.hasNext();) {
|
||||
final StringLocated s = it.next();
|
||||
final String tmp = s.getString();
|
||||
result.add(tmp);
|
||||
final LineLocation location = s.getLocation();
|
||||
if (location.getDescription().equals(higherErrorPosition.getDescription())
|
||||
&& location.compareTo(higherErrorPosition) >= 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -458,11 +460,7 @@ public class PSystemError extends AbstractPSystem {
|
||||
final String last = htmlStrings.get(idx);
|
||||
htmlStrings.set(idx, "<w:" + getRed(useRed) + ">" + last + "</w>");
|
||||
}
|
||||
// final String errorLine = getSource().getLine(higherErrorPosition);
|
||||
// final String err = StringUtils.hideComparatorCharacters(errorLine);
|
||||
// if (StringUtils.isNotEmpty(err)) {
|
||||
// htmlStrings.add("<w:" + getRed(useRed) + ">" + err + "</w>");
|
||||
// }
|
||||
|
||||
final Collection<String> textErrors = new LinkedHashSet<String>();
|
||||
for (ErrorUml er : printedErrors) {
|
||||
textErrors.add(er.getError());
|
||||
|
@ -247,8 +247,8 @@ public class PSystemUtils {
|
||||
|
||||
if (fileFormat.getFileFormat() == FileFormat.PNG) {
|
||||
result = new PngSplitter(suggestedFile, system.getHorizontalPages(), system.getVerticalPages(),
|
||||
system.getMetadata(), system.getDpi(fileFormat), fileFormat.isWithMetadata(), system.getSkinParam()
|
||||
.getSplitParam()).getFiles();
|
||||
system.getMetadata(), (int) (system.getScaleCoef(fileFormat) * 96), fileFormat.isWithMetadata(),
|
||||
system.getSkinParam().getSplitParam()).getFiles();
|
||||
}
|
||||
final List<FileImageData> result2 = new ArrayList<FileImageData>();
|
||||
for (File f : result) {
|
||||
|
@ -220,7 +220,7 @@ public class SkinParam implements ISkinParam {
|
||||
if (stereotype == null) {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
final String value2 = getValue("spotchar" + stereotype.getLabel(false));
|
||||
final String value2 = getValue("spotchar" + stereotype.getLabel(Guillemet.DOUBLE_COMPARATOR));
|
||||
if (value2 != null && value2.length() > 0) {
|
||||
return value2.charAt(0);
|
||||
}
|
||||
@ -230,7 +230,7 @@ public class SkinParam implements ISkinParam {
|
||||
public Colors getColors(ColorParam param, Stereotype stereotype) {
|
||||
if (stereotype != null) {
|
||||
checkStereotype(stereotype);
|
||||
final String value2 = getValue(param.name() + "color" + stereotype.getLabel(false));
|
||||
final String value2 = getValue(param.name() + "color" + stereotype.getLabel(Guillemet.DOUBLE_COMPARATOR));
|
||||
if (value2 != null && getIHtmlColorSet().getColorIfValid(value2) != null) {
|
||||
return new Colors(value2, getIHtmlColorSet(), param.getColorType());
|
||||
}
|
||||
@ -261,7 +261,8 @@ public class SkinParam implements ISkinParam {
|
||||
private int getFontSize(Stereotype stereotype, FontParam... param) {
|
||||
if (stereotype != null) {
|
||||
checkStereotype(stereotype);
|
||||
final String value2 = getFirstValueNonNullWithSuffix("fontsize" + stereotype.getLabel(false), param);
|
||||
final String value2 = getFirstValueNonNullWithSuffix(
|
||||
"fontsize" + stereotype.getLabel(Guillemet.DOUBLE_COMPARATOR), param);
|
||||
if (value2 != null && value2.matches("\\d+")) {
|
||||
return Integer.parseInt(value2);
|
||||
}
|
||||
@ -279,7 +280,8 @@ public class SkinParam implements ISkinParam {
|
||||
private String getFontFamily(Stereotype stereotype, FontParam... param) {
|
||||
if (stereotype != null) {
|
||||
checkStereotype(stereotype);
|
||||
final String value2 = getFirstValueNonNullWithSuffix("fontname" + stereotype.getLabel(false), param);
|
||||
final String value2 = getFirstValueNonNullWithSuffix(
|
||||
"fontname" + stereotype.getLabel(Guillemet.DOUBLE_COMPARATOR), param);
|
||||
if (value2 != null) {
|
||||
return StringUtils.eventuallyRemoveStartingAndEndingDoubleQuote(value2);
|
||||
}
|
||||
@ -302,7 +304,8 @@ public class SkinParam implements ISkinParam {
|
||||
String value = null;
|
||||
if (stereotype != null) {
|
||||
checkStereotype(stereotype);
|
||||
value = getFirstValueNonNullWithSuffix("fontcolor" + stereotype.getLabel(false), param);
|
||||
value = getFirstValueNonNullWithSuffix("fontcolor" + stereotype.getLabel(Guillemet.DOUBLE_COMPARATOR),
|
||||
param);
|
||||
}
|
||||
if (value == null || getIHtmlColorSet().getColorIfValid(value) == null) {
|
||||
value = getFirstValueNonNullWithSuffix("fontcolor", param);
|
||||
@ -330,7 +333,8 @@ public class SkinParam implements ISkinParam {
|
||||
String value = null;
|
||||
if (stereotype != null) {
|
||||
checkStereotype(stereotype);
|
||||
value = getFirstValueNonNullWithSuffix("fontstyle" + stereotype.getLabel(false), param);
|
||||
value = getFirstValueNonNullWithSuffix("fontstyle" + stereotype.getLabel(Guillemet.DOUBLE_COMPARATOR),
|
||||
param);
|
||||
}
|
||||
if (value == null) {
|
||||
value = getFirstValueNonNullWithSuffix("fontstyle", param);
|
||||
@ -579,7 +583,7 @@ public class SkinParam implements ISkinParam {
|
||||
public boolean shadowing(Stereotype stereotype) {
|
||||
if (stereotype != null) {
|
||||
checkStereotype(stereotype);
|
||||
final String value2 = getValue("shadowing" + stereotype.getLabel(false));
|
||||
final String value2 = getValue("shadowing" + stereotype.getLabel(Guillemet.DOUBLE_COMPARATOR));
|
||||
if (value2 != null) {
|
||||
return value2.equalsIgnoreCase("true");
|
||||
}
|
||||
@ -600,7 +604,7 @@ public class SkinParam implements ISkinParam {
|
||||
public boolean shadowingForNote(Stereotype stereotype) {
|
||||
if (stereotype != null) {
|
||||
checkStereotype(stereotype);
|
||||
final String value2 = getValue("note" + "shadowing" + stereotype.getLabel(false));
|
||||
final String value2 = getValue("note" + "shadowing" + stereotype.getLabel(Guillemet.DOUBLE_COMPARATOR));
|
||||
if (value2 != null) {
|
||||
return value2.equalsIgnoreCase("true");
|
||||
}
|
||||
@ -619,7 +623,7 @@ public class SkinParam implements ISkinParam {
|
||||
final String name = skinParameter.getUpperCaseName();
|
||||
if (stereotype != null) {
|
||||
checkStereotype(stereotype);
|
||||
final String value2 = getValue(name + "shadowing" + stereotype.getLabel(false));
|
||||
final String value2 = getValue(name + "shadowing" + stereotype.getLabel(Guillemet.DOUBLE_COMPARATOR));
|
||||
if (value2 != null) {
|
||||
return value2.equalsIgnoreCase("true");
|
||||
}
|
||||
@ -743,7 +747,7 @@ public class SkinParam implements ISkinParam {
|
||||
|
||||
private Double getCornerInternal(String key, CornerParam param, Stereotype stereotype) {
|
||||
if (stereotype != null) {
|
||||
key += stereotype.getLabel(false);
|
||||
key += stereotype.getLabel(Guillemet.DOUBLE_COMPARATOR);
|
||||
}
|
||||
final String value = getValue(key);
|
||||
if (value != null && value.matches("\\d+")) {
|
||||
@ -757,12 +761,14 @@ public class SkinParam implements ISkinParam {
|
||||
if (stereotype != null) {
|
||||
checkStereotype(stereotype);
|
||||
|
||||
final String styleValue = getValue(param.name() + "style" + stereotype.getLabel(false));
|
||||
final String styleValue = getValue(param.name() + "style"
|
||||
+ stereotype.getLabel(Guillemet.DOUBLE_COMPARATOR));
|
||||
if (styleValue != null) {
|
||||
style = LinkStyle.fromString2(styleValue);
|
||||
}
|
||||
|
||||
final String value2 = getValue(param.name() + "thickness" + stereotype.getLabel(false));
|
||||
final String value2 = getValue(param.name() + "thickness"
|
||||
+ stereotype.getLabel(Guillemet.DOUBLE_COMPARATOR));
|
||||
if (value2 != null && value2.matches("[\\d.]+")) {
|
||||
if (style == null) {
|
||||
style = LinkStyle.NORMAL();
|
||||
@ -856,7 +862,7 @@ public class SkinParam implements ISkinParam {
|
||||
String value = getValue("activityshape");
|
||||
if (stereotype != null) {
|
||||
checkStereotype(stereotype);
|
||||
final String value2 = getValue("activityshape" + stereotype.getLabel(false));
|
||||
final String value2 = getValue("activityshape" + stereotype.getLabel(Guillemet.DOUBLE_COMPARATOR));
|
||||
if (value2 != null) {
|
||||
value = value2;
|
||||
}
|
||||
@ -896,12 +902,9 @@ public class SkinParam implements ISkinParam {
|
||||
return result;
|
||||
}
|
||||
|
||||
public boolean useGuillemet() {
|
||||
public Guillemet guillemet() {
|
||||
final String value = getValue("guillemet");
|
||||
if ("false".equalsIgnoreCase(value)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
return Guillemet.GUILLEMET.fromDescription(value);
|
||||
}
|
||||
|
||||
public boolean handwritten() {
|
||||
|
@ -214,8 +214,8 @@ public class SkinParamDelegator implements ISkinParam {
|
||||
return skinParam.groupInheritance();
|
||||
}
|
||||
|
||||
public boolean useGuillemet() {
|
||||
return skinParam.useGuillemet();
|
||||
public Guillemet guillemet() {
|
||||
return skinParam.guillemet();
|
||||
}
|
||||
|
||||
public boolean handwritten() {
|
||||
|
@ -41,6 +41,6 @@ public interface SpriteContainer {
|
||||
|
||||
public Sprite getSprite(String name);
|
||||
|
||||
public boolean useGuillemet();
|
||||
public Guillemet guillemet();
|
||||
|
||||
}
|
@ -59,8 +59,8 @@ public class SpriteContainerEmpty implements SpriteContainer, ISkinSimple {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public boolean useGuillemet() {
|
||||
return false;
|
||||
public Guillemet guillemet() {
|
||||
return Guillemet.DOUBLE_COMPARATOR;
|
||||
}
|
||||
|
||||
public String getMonospacedFamily() {
|
||||
|
@ -35,17 +35,22 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml;
|
||||
|
||||
public class CharSequence2Impl implements CharSequence2 {
|
||||
public class StringLocated {
|
||||
|
||||
private final CharSequence s;
|
||||
private final String s;
|
||||
private final LineLocation location;
|
||||
private String preprocessorError;
|
||||
private final String preprocessorError;
|
||||
|
||||
public CharSequence2Impl(CharSequence s, LineLocation location) {
|
||||
public StringLocated(String s, LineLocation location) {
|
||||
this(s, location, null);
|
||||
}
|
||||
|
||||
public CharSequence2Impl(CharSequence s, LineLocation location, String preprocessorError) {
|
||||
@Override
|
||||
public String toString() {
|
||||
return super.toString() + " " + s;
|
||||
}
|
||||
|
||||
public StringLocated(String s, LineLocation location, String preprocessorError) {
|
||||
if (s == null) {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
@ -54,84 +59,59 @@ public class CharSequence2Impl implements CharSequence2 {
|
||||
this.preprocessorError = preprocessorError;
|
||||
}
|
||||
|
||||
// public static CharSequence2 errorPreprocessor(CharSequence s, String preprocessorError) {
|
||||
// return new CharSequence2Impl("FOO4242", null, preprocessorError);
|
||||
// }
|
||||
|
||||
public CharSequence2 withErrorPreprocessor(String preprocessorError) {
|
||||
return new CharSequence2Impl(s, location, preprocessorError);
|
||||
public StringLocated withErrorPreprocessor(String preprocessorError) {
|
||||
return new StringLocated(s, location, preprocessorError);
|
||||
}
|
||||
|
||||
public int length() {
|
||||
return s.length();
|
||||
public StringLocated sub(int start, int end) {
|
||||
return new StringLocated(this.getString().substring(start, end), this.getLocation(),
|
||||
this.getPreprocessorError());
|
||||
}
|
||||
|
||||
public char charAt(int index) {
|
||||
return s.charAt(index);
|
||||
public String getStringTrimmed() {
|
||||
return StringUtils.trin(this.getString());
|
||||
}
|
||||
|
||||
public CharSequence2 subSequence(int start, int end) {
|
||||
return new CharSequence2Impl(s.subSequence(start, end), location, preprocessorError);
|
||||
}
|
||||
|
||||
public CharSequence toCharSequence() {
|
||||
return s;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return s.toString();
|
||||
}
|
||||
|
||||
public String toString2() {
|
||||
return s.toString();
|
||||
}
|
||||
|
||||
public LineLocation getLocation() {
|
||||
return location;
|
||||
}
|
||||
|
||||
public CharSequence2 trin() {
|
||||
return new CharSequence2Impl(StringUtils.trin(s.toString()), location, preprocessorError);
|
||||
}
|
||||
|
||||
public boolean startsWith(String start) {
|
||||
return s.toString().startsWith(start);
|
||||
}
|
||||
|
||||
public String getPreprocessorError() {
|
||||
return preprocessorError;
|
||||
}
|
||||
|
||||
public CharSequence2 removeInnerComment() {
|
||||
public StringLocated removeInnerComment() {
|
||||
final String string = s.toString();
|
||||
final String trim = string.replace('\t', ' ').trim();
|
||||
if (trim.startsWith("/'")) {
|
||||
final int idx = string.indexOf("'/");
|
||||
if (idx != -1) {
|
||||
return new CharSequence2Impl(removeSpecialInnerComment(s.subSequence(idx + 2, s.length())), location,
|
||||
return new StringLocated(removeSpecialInnerComment(s.substring(idx + 2, s.length())), location,
|
||||
preprocessorError);
|
||||
}
|
||||
}
|
||||
if (trim.endsWith("'/")) {
|
||||
final int idx = string.lastIndexOf("/'");
|
||||
if (idx != -1) {
|
||||
return new CharSequence2Impl(removeSpecialInnerComment(s.subSequence(0, idx)), location,
|
||||
preprocessorError);
|
||||
return new StringLocated(removeSpecialInnerComment(s.substring(0, idx)), location, preprocessorError);
|
||||
}
|
||||
}
|
||||
if (trim.contains("/'''") && trim.contains("'''/")) {
|
||||
return new CharSequence2Impl(removeSpecialInnerComment(s), location, preprocessorError);
|
||||
return new StringLocated(removeSpecialInnerComment(s), location, preprocessorError);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
private CharSequence removeSpecialInnerComment(CharSequence cs) {
|
||||
final String s = cs.toString();
|
||||
private String removeSpecialInnerComment(String s) {
|
||||
if (s.contains("/'''") && s.contains("'''/")) {
|
||||
return s.replaceAll("/'''[-\\w]*'''/", "");
|
||||
|
||||
}
|
||||
return cs;
|
||||
return s;
|
||||
}
|
||||
|
||||
public String getString() {
|
||||
return s;
|
||||
}
|
||||
|
||||
public LineLocation getLocation() {
|
||||
return location;
|
||||
}
|
||||
|
||||
public String getPreprocessorError() {
|
||||
return preprocessorError;
|
||||
}
|
||||
|
||||
}
|
@ -412,20 +412,6 @@ public class StringUtils {
|
||||
return s.endsWith("\\") && s.endsWith("\\\\") == false;
|
||||
}
|
||||
|
||||
public static String manageGuillemetStrict(String st) {
|
||||
if (st.startsWith("<< ")) {
|
||||
st = "\u00AB" + st.substring(3);
|
||||
} else if (st.startsWith("<<")) {
|
||||
st = "\u00AB" + st.substring(2);
|
||||
}
|
||||
if (st.endsWith(" >>")) {
|
||||
st = st.substring(0, st.length() - 3) + "\u00BB";
|
||||
} else if (st.endsWith(">>")) {
|
||||
st = st.substring(0, st.length() - 2) + "\u00BB";
|
||||
}
|
||||
return st;
|
||||
}
|
||||
|
||||
public static String rot(String s) {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < s.length(); i++) {
|
||||
@ -442,10 +428,6 @@ public class StringUtils {
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public static String manageGuillemet(String st) {
|
||||
return st.replaceAll("\\<\\<\\s?((?:\\<&\\w+\\>|[^<>])+?)\\s?\\>\\>", "\u00AB$1\u00BB");
|
||||
}
|
||||
|
||||
public static String manageUnicodeNotationUplus(String s) {
|
||||
final Pattern pattern = Pattern.compile("\\<U\\+([0-9a-fA-F]{4,5})\\>");
|
||||
final Matcher matcher = pattern.matcher(s);
|
||||
@ -478,12 +460,15 @@ public class StringUtils {
|
||||
}
|
||||
|
||||
public static String trinNoTrace(CharSequence s) {
|
||||
// if (s instanceof CharSequence2) {
|
||||
// return ((CharSequence2) s).getString().trim();
|
||||
// }
|
||||
return s.toString().trim();
|
||||
}
|
||||
|
||||
public static String trin(CharSequence arg) {
|
||||
public static String trin(String arg) {
|
||||
if (arg.length() == 0) {
|
||||
return arg.toString();
|
||||
return arg;
|
||||
}
|
||||
int i = 0;
|
||||
while (i < arg.length() && isSpaceOrTabOrNull(arg.charAt(i))) {
|
||||
@ -494,9 +479,9 @@ public class StringUtils {
|
||||
j--;
|
||||
}
|
||||
if (i == 0 && j == arg.length() - 1) {
|
||||
return arg.toString();
|
||||
return arg;
|
||||
}
|
||||
return arg.subSequence(i, j + 1).toString();
|
||||
return arg.substring(i, j + 1);
|
||||
}
|
||||
|
||||
private static boolean isSpaceOrTabOrNull(char c) {
|
||||
|
@ -207,16 +207,16 @@ public abstract class UmlDiagram extends AbstractPSystem implements Diagram, Ann
|
||||
return animation;
|
||||
}
|
||||
|
||||
public final double getDpiFactor(FileFormatOption fileFormatOption) {
|
||||
public final double getScaleCoef(FileFormatOption fileFormatOption) {
|
||||
if (getSkinParam().getDpi() == 96) {
|
||||
return 1.0;
|
||||
return fileFormatOption.getScaleCoef();
|
||||
}
|
||||
return getSkinParam().getDpi() / 96.0;
|
||||
return getSkinParam().getDpi() * fileFormatOption.getScaleCoef() / 96.0;
|
||||
}
|
||||
|
||||
public final int getDpi(FileFormatOption fileFormatOption) {
|
||||
return getSkinParam().getDpi();
|
||||
}
|
||||
// public final int getDpi(FileFormatOption fileFormatOption) {
|
||||
// return getSkinParam().getDpi();
|
||||
// }
|
||||
|
||||
public final boolean isHideUnlinkedData() {
|
||||
return hideUnlinkedData;
|
||||
@ -473,7 +473,7 @@ public abstract class UmlDiagram extends AbstractPSystem implements Diagram, Ann
|
||||
if (f.exists() == false || f.canRead() == false) {
|
||||
return CommandExecutionResult.error("Cannot load skin from " + filename);
|
||||
}
|
||||
final BlocLines lines = BlocLines.load(f);
|
||||
final BlocLines lines = BlocLines.load(f, new LineLocationImpl(f.getName(), null));
|
||||
final CommandSkinParam cmd1 = new CommandSkinParam();
|
||||
final CommandSkinParamMultilines cmd2 = new CommandSkinParamMultilines();
|
||||
for (int i = 0; i < lines.size(); i++) {
|
||||
|
@ -36,5 +36,5 @@
|
||||
package net.sourceforge.plantuml;
|
||||
|
||||
public enum UmlDiagramType {
|
||||
SEQUENCE, STATE, CLASS, OBJECT, ACTIVITY, DESCRIPTION, COMPOSITE, FLOW, TIMING, BPM, NWDIAG, MINDMAP, HELP
|
||||
SEQUENCE, STATE, CLASS, OBJECT, ACTIVITY, DESCRIPTION, COMPOSITE, FLOW, TIMING, BPM, NWDIAG, MINDMAP, WBS, HELP
|
||||
}
|
||||
|
@ -52,7 +52,6 @@ import net.sourceforge.plantuml.FileFormatOption;
|
||||
import net.sourceforge.plantuml.api.ImageDataSimple;
|
||||
import net.sourceforge.plantuml.core.DiagramDescription;
|
||||
import net.sourceforge.plantuml.core.ImageData;
|
||||
|
||||
import ext.plantuml.com.ctreber.acearth.ACearth;
|
||||
import ext.plantuml.com.ctreber.acearth.ConfigurationACearth;
|
||||
import ext.plantuml.com.ctreber.acearth.plugins.markers.Marker;
|
||||
|
@ -44,7 +44,6 @@ import net.sourceforge.plantuml.command.PSystemBasicFactory;
|
||||
import net.sourceforge.plantuml.command.regex.Matcher2;
|
||||
import net.sourceforge.plantuml.command.regex.MyPattern;
|
||||
import net.sourceforge.plantuml.command.regex.Pattern2;
|
||||
|
||||
import ext.plantuml.com.ctreber.acearth.plugins.markers.Marker;
|
||||
|
||||
public class PSystemXearthFactory extends PSystemBasicFactory<PSystemXearth> {
|
||||
|
@ -36,6 +36,7 @@
|
||||
package net.sourceforge.plantuml.activitydiagram.command;
|
||||
|
||||
import net.sourceforge.plantuml.Direction;
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.StringUtils;
|
||||
import net.sourceforge.plantuml.activitydiagram.ActivityDiagram;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
@ -78,7 +79,7 @@ public class CommandIf extends SingleLineCommand2<ActivityDiagram> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram system, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram system, LineLocation location, RegexResult arg) {
|
||||
final IEntity entity1 = CommandLinkActivity.getEntity(system, arg, true);
|
||||
if (entity1 == null) {
|
||||
return CommandExecutionResult.error("No if possible at this point");
|
||||
|
@ -36,6 +36,7 @@
|
||||
package net.sourceforge.plantuml.activitydiagram.command;
|
||||
|
||||
import net.sourceforge.plantuml.Direction;
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.StringUtils;
|
||||
import net.sourceforge.plantuml.Url;
|
||||
import net.sourceforge.plantuml.UrlBuilder;
|
||||
@ -111,7 +112,7 @@ public class CommandLinkActivity extends SingleLineCommand2<ActivityDiagram> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram diagram, LineLocation location, RegexResult arg) {
|
||||
final IEntity entity1 = getEntity(diagram, arg, true);
|
||||
if (entity1 == null) {
|
||||
return CommandExecutionResult.error("No such activity");
|
||||
|
@ -39,6 +39,7 @@ import java.util.List;
|
||||
|
||||
import net.sourceforge.plantuml.BackSlash;
|
||||
import net.sourceforge.plantuml.Direction;
|
||||
import net.sourceforge.plantuml.StringLocated;
|
||||
import net.sourceforge.plantuml.StringUtils;
|
||||
import net.sourceforge.plantuml.Url;
|
||||
import net.sourceforge.plantuml.UrlBuilder;
|
||||
@ -110,7 +111,7 @@ public class CommandLinkLongActivity extends CommandMultilines2<ActivityDiagram>
|
||||
|
||||
protected CommandExecutionResult executeNow(final ActivityDiagram diagram, BlocLines lines) {
|
||||
lines = lines.trim(false);
|
||||
final RegexResult line0 = getStartingPattern().matcher(StringUtils.trin(lines.getFirst499()));
|
||||
final RegexResult line0 = getStartingPattern().matcher(lines.getFirst499().getStringTrimmed());
|
||||
|
||||
final IEntity entity1 = CommandLinkActivity.getEntity(diagram, line0, true);
|
||||
if (entity1 == null) {
|
||||
@ -129,14 +130,14 @@ public class CommandLinkLongActivity extends CommandMultilines2<ActivityDiagram>
|
||||
final String desc0 = line0.get("DESC", 0);
|
||||
Url urlActivity = null;
|
||||
if (StringUtils.isNotEmpty(desc0)) {
|
||||
urlActivity = extractUrl(diagram, desc0);
|
||||
urlActivity = extractUrlString(diagram, desc0);
|
||||
if (urlActivity == null) {
|
||||
sb.append(desc0);
|
||||
sb.append(BackSlash.BS_BS_N);
|
||||
}
|
||||
}
|
||||
int i = 0;
|
||||
for (CharSequence cs : lines.subExtract(1, 1)) {
|
||||
for (StringLocated cs : lines.subExtract(1, 1)) {
|
||||
i++;
|
||||
if (i == 1 && urlActivity == null) {
|
||||
urlActivity = extractUrl(diagram, cs);
|
||||
@ -144,14 +145,14 @@ public class CommandLinkLongActivity extends CommandMultilines2<ActivityDiagram>
|
||||
continue;
|
||||
}
|
||||
}
|
||||
sb.append(cs);
|
||||
sb.append(cs.getString());
|
||||
if (i < lines.size() - 2) {
|
||||
sb.append(BackSlash.BS_BS_N);
|
||||
}
|
||||
}
|
||||
|
||||
final List<String> lineLast = StringUtils.getSplit(MyPattern.cmpile(getPatternEnd()), lines.getLast499()
|
||||
.toString());
|
||||
.getString());
|
||||
if (StringUtils.isNotEmpty(lineLast.get(0))) {
|
||||
if (sb.length() > 0 && sb.toString().endsWith(BackSlash.BS_BS_N) == false) {
|
||||
sb.append(BackSlash.BS_BS_N);
|
||||
@ -223,9 +224,13 @@ public class CommandLinkLongActivity extends CommandMultilines2<ActivityDiagram>
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
public Url extractUrl(final ActivityDiagram diagram, CharSequence string) {
|
||||
public Url extractUrl(final ActivityDiagram diagram, StringLocated string) {
|
||||
return extractUrlString(diagram, string.getString());
|
||||
}
|
||||
|
||||
public Url extractUrlString(final ActivityDiagram diagram, String string) {
|
||||
final UrlBuilder urlBuilder = new UrlBuilder(diagram.getSkinParam().getValue("topurl"), ModeUrl.STRICT);
|
||||
return urlBuilder.getUrl(string.toString());
|
||||
return urlBuilder.getUrl(string);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.StringUtils;
|
||||
import net.sourceforge.plantuml.activitydiagram.ActivityDiagram;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
@ -77,7 +78,7 @@ public class CommandPartition extends SingleLineCommand2<ActivityDiagram> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram diagram, LineLocation location, RegexResult arg) {
|
||||
final Code code = Code.of(StringUtils.eventuallyRemoveStartingAndEndingDoubleQuote(arg.get("NAME", 0)));
|
||||
final IGroup currentPackage = diagram.getCurrentGroup();
|
||||
diagram.gotoGroup2(code, Display.getWithNewlines(code), GroupType.PACKAGE, currentPackage,
|
||||
|
@ -171,7 +171,11 @@ public class ActivityDiagram3 extends UmlDiagram {
|
||||
if (last instanceof InstructionWhile == false) {
|
||||
return false;
|
||||
}
|
||||
((InstructionWhile) last).setSpecial(special);
|
||||
final InstructionWhile instructionWhile = (InstructionWhile) last;
|
||||
if (instructionWhile.containsBreak()) {
|
||||
return false;
|
||||
}
|
||||
instructionWhile.setSpecial(special);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -220,7 +224,7 @@ public class ActivityDiagram3 extends UmlDiagram {
|
||||
final double dpiFactor;
|
||||
final Scale scale = getScale();
|
||||
if (scale == null) {
|
||||
dpiFactor = getDpiFactor(fileFormatOption);
|
||||
dpiFactor = getScaleCoef(fileFormatOption);
|
||||
} else {
|
||||
dpiFactor = scale.getScale(dim.getWidth(), dim.getHeight());
|
||||
}
|
||||
|
@ -60,6 +60,10 @@ public class Branch {
|
||||
|
||||
private Ftile ftile;
|
||||
|
||||
public boolean containsBreak() {
|
||||
return list.containsBreak();
|
||||
}
|
||||
|
||||
public Branch(Swimlane swimlane, Display labelPositive, Display labelTest, HtmlColor color, Display inlabel) {
|
||||
if (labelPositive == null) {
|
||||
throw new IllegalArgumentException();
|
||||
@ -162,4 +166,5 @@ public class Branch {
|
||||
return special;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -55,5 +55,7 @@ public interface Instruction extends Swimable {
|
||||
public LinkRendering getInLinkRendering();
|
||||
|
||||
public boolean addNote(Display note, NotePosition position, NoteType type, Colors colors, Swimlane swimlaneNote);
|
||||
|
||||
public boolean containsBreak();
|
||||
|
||||
}
|
||||
|
@ -68,4 +68,8 @@ public class InstructionBreak extends MonoSwimable implements Instruction {
|
||||
return inlinkRendering;
|
||||
}
|
||||
|
||||
public boolean containsBreak() {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -69,4 +69,8 @@ public class InstructionEnd extends MonoSwimable implements Instruction {
|
||||
return inlinkRendering;
|
||||
}
|
||||
|
||||
public boolean containsBreak() {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -59,6 +59,15 @@ public class InstructionFork extends WithNote implements Instruction {
|
||||
private String label;
|
||||
boolean finished = false;
|
||||
|
||||
public boolean containsBreak() {
|
||||
for (InstructionList fork : forks) {
|
||||
if (fork.containsBreak()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public InstructionFork(Instruction parent, LinkRendering inlinkRendering, ISkinParam skinParam) {
|
||||
this.parent = parent;
|
||||
this.inlinkRendering = inlinkRendering;
|
||||
|
@ -65,4 +65,8 @@ public class InstructionGoto extends MonoSwimable implements Instruction {
|
||||
return LinkRendering.none();
|
||||
}
|
||||
|
||||
public boolean containsBreak() {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -63,6 +63,10 @@ public class InstructionGroup implements Instruction, InstructionCollection {
|
||||
private final double roundCorner;
|
||||
private PositionedNote note = null;
|
||||
|
||||
public boolean containsBreak() {
|
||||
return list.containsBreak();
|
||||
}
|
||||
|
||||
public InstructionGroup(Instruction parent, Display test, HtmlColor backColor, HtmlColor titleColor,
|
||||
Swimlane swimlane, HtmlColor borderColor, LinkRendering linkRendering, USymbol type, double roundCorner) {
|
||||
this.list = new InstructionList(swimlane);
|
||||
|
@ -69,6 +69,18 @@ public class InstructionIf extends WithNote implements Instruction, InstructionC
|
||||
|
||||
private final Swimlane swimlane;
|
||||
|
||||
public boolean containsBreak() {
|
||||
for (Branch branch : thens) {
|
||||
if (branch.containsBreak()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (elseBranch != null) {
|
||||
return elseBranch.containsBreak();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public InstructionIf(Swimlane swimlane, Instruction parent, Display labelTest, Display whenThen,
|
||||
LinkRendering inlinkRendering, HtmlColor color, ISkinParam skinParam) {
|
||||
this.parent = parent;
|
||||
|
@ -65,4 +65,8 @@ public class InstructionLabel extends MonoSwimable implements Instruction {
|
||||
return LinkRendering.none();
|
||||
}
|
||||
|
||||
public boolean containsBreak() {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -57,6 +57,15 @@ public class InstructionList extends WithNote implements Instruction, Instructio
|
||||
private final List<Instruction> all = new ArrayList<Instruction>();
|
||||
private final Swimlane defaultSwimlane;
|
||||
|
||||
public boolean containsBreak() {
|
||||
for (Instruction ins : all) {
|
||||
if (ins.containsBreak()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public InstructionList() {
|
||||
this(null);
|
||||
}
|
||||
|
@ -90,4 +90,8 @@ public class InstructionPartition implements Instruction {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
public boolean containsBreak() {
|
||||
return list.containsBreak();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -65,6 +65,11 @@ public class InstructionRepeat implements Instruction {
|
||||
private boolean testCalled = false;
|
||||
private LinkRendering endRepeatLinkRendering = LinkRendering.none();
|
||||
private LinkRendering backRepeatLinkRendering = LinkRendering.none();
|
||||
|
||||
public boolean containsBreak() {
|
||||
return repeatList.containsBreak();
|
||||
}
|
||||
|
||||
|
||||
public InstructionRepeat(Swimlane swimlane, Instruction parent, LinkRendering nextLinkRenderer, HtmlColor color,
|
||||
Display startLabel) {
|
||||
|
@ -52,6 +52,11 @@ public class InstructionSimple extends MonoSwimable implements Instruction {
|
||||
private final LinkRendering inlinkRendering;
|
||||
private final BoxStyle style;
|
||||
private final Url url;
|
||||
|
||||
public boolean containsBreak() {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public InstructionSimple(Display label, LinkRendering inlinkRendering, Swimlane swimlane, BoxStyle style, Url url,
|
||||
Colors colors) {
|
||||
|
@ -61,6 +61,16 @@ public class InstructionSplit implements Instruction {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean containsBreak() {
|
||||
for (InstructionList split : splits) {
|
||||
if (split.containsBreak()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private InstructionList getLast() {
|
||||
return splits.get(splits.size() - 1);
|
||||
|
@ -46,6 +46,10 @@ public class InstructionSpot extends MonoSwimable implements Instruction {
|
||||
private final LinkRendering inlinkRendering;
|
||||
private final String spot;
|
||||
|
||||
public boolean containsBreak() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public InstructionSpot(String spot, LinkRendering inlinkRendering, Swimlane swimlane) {
|
||||
super(swimlane);
|
||||
this.spot = spot;
|
||||
|
@ -50,6 +50,11 @@ public class InstructionStart extends MonoSwimable implements Instruction {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean containsBreak() {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public Ftile createFtile(FtileFactory factory) {
|
||||
Ftile result = factory.start(getSwimlaneIn());
|
||||
|
@ -50,6 +50,11 @@ public class InstructionStop extends MonoSwimable implements Instruction {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean containsBreak() {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public Ftile createFtile(FtileFactory factory) {
|
||||
Ftile result = factory.stop(getSwimlaneIn());
|
||||
|
@ -166,4 +166,8 @@ public class InstructionWhile extends WithNote implements Instruction, Instructi
|
||||
this.specialOut = special;
|
||||
}
|
||||
|
||||
public boolean containsBreak() {
|
||||
return repeatList.containsBreak();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.Url;
|
||||
import net.sourceforge.plantuml.UrlBuilder;
|
||||
import net.sourceforge.plantuml.UrlBuilder.ModeUrl;
|
||||
@ -74,7 +75,7 @@ public class CommandActivity3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
|
||||
final Url url;
|
||||
if (arg.get("URL", 0) == null) {
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ftile.BoxStyle;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
@ -59,7 +60,7 @@ public class CommandActivityLegacy1 extends SingleLineCommand2<ActivityDiagram3>
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
diagram.addActivity(Display.getWithNewlines(arg.get("LABEL", 0)), BoxStyle.PLAIN, null, Colors.empty());
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
@ -35,7 +35,6 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.StringUtils;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ftile.BoxStyle;
|
||||
import net.sourceforge.plantuml.command.BlocLines;
|
||||
@ -74,7 +73,7 @@ public class CommandActivityLong3 extends CommandMultilines2<ActivityDiagram3> {
|
||||
|
||||
protected CommandExecutionResult executeNow(ActivityDiagram3 diagram, BlocLines lines) {
|
||||
lines = lines.removeEmptyColumns();
|
||||
final RegexResult line0 = getStartingPattern().matcher(StringUtils.trin(lines.getFirst499()));
|
||||
final RegexResult line0 = getStartingPattern().matcher(lines.getFirst499().getStringTrimmed());
|
||||
final Colors colors = color().getColor(line0, diagram.getSkinParam().getIHtmlColorSet());
|
||||
// final HtmlColor color = diagram.getSkinParam().getIHtmlColorSet().getColorIfValid(line0.get("COLOR", 0));
|
||||
final BoxStyle style = BoxStyle.fromChar(lines.getLastChar());
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -65,7 +66,7 @@ public class CommandArrow3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
|
||||
final String colorString = arg.get("COLOR", 0);
|
||||
if (colorString != null) {
|
||||
|
@ -37,7 +37,6 @@ package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.sourceforge.plantuml.StringUtils;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.BlocLines;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
@ -73,7 +72,7 @@ public class CommandArrowLong3 extends CommandMultilines2<ActivityDiagram3> {
|
||||
|
||||
protected CommandExecutionResult executeNow(ActivityDiagram3 diagram, BlocLines lines) {
|
||||
lines = lines.removeEmptyColumns();
|
||||
final RegexResult line0 = getStartingPattern().matcher(StringUtils.trin(lines.getFirst499()));
|
||||
final RegexResult line0 = getStartingPattern().matcher(lines.getFirst499().getStringTrimmed());
|
||||
// final HtmlColor color = diagram.getSkinParam().getIHtmlColorSet().getColorIfValid(line0.get("COLOR", 0));
|
||||
// diagram.setColorNextArrow(HtmlColorAndStyle.fromColor(color));
|
||||
final String colorString = line0.get("COLOR", 0);
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -59,7 +60,7 @@ public class CommandBackward3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
final Display label = Display.getWithNewlines(arg.get("LABEL", 0));
|
||||
return diagram.backwardWhile(label);
|
||||
}
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -56,7 +57,7 @@ public class CommandBreak extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
diagram.breakInstruction();
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -56,7 +57,7 @@ public class CommandCircleSpot3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
diagram.addSpot(arg.get("SPOT", 0));
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -58,7 +59,7 @@ public class CommandElse3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
// if (getSystem().getLastEntityConsulted() == null) {
|
||||
// return CommandExecutionResult.error("No if for this endif");
|
||||
// }
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -66,7 +67,7 @@ public class CommandElseIf2 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
final HtmlColor color = diagram.getSkinParam().getIHtmlColorSet().getColorIfValid(arg.get("COLOR", 0));
|
||||
|
||||
String test = arg.get("TEST", 0);
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -58,7 +59,7 @@ public class CommandElseLegacy1 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
// if (getSystem().getLastEntityConsulted() == null) {
|
||||
// return CommandExecutionResult.error("No if for this endif");
|
||||
// }
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -56,7 +57,7 @@ public class CommandEnd3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
diagram.end();
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -56,7 +57,7 @@ public class CommandEndif3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
// if (getSystem().getLastEntityConsulted() == null) {
|
||||
// return CommandExecutionResult.error("No if for this endif");
|
||||
// }
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -56,7 +57,7 @@ public class CommandFork3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
diagram.fork();
|
||||
|
||||
return CommandExecutionResult.ok();
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -56,7 +57,7 @@ public class CommandForkAgain3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
return diagram.forkAgain();
|
||||
|
||||
}
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ForkStyle;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
@ -59,7 +60,7 @@ public class CommandForkEnd3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
final String style = arg.get("STYLE", 0);
|
||||
final ForkStyle forkStyle = style.contains("merge") ? ForkStyle.MERGE : ForkStyle.FORK;
|
||||
final String label = arg.get("LABEL", 0);
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -58,7 +59,7 @@ public class CommandGoto extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
final String name = arg.get("NAME", 0);
|
||||
return diagram.addGoto(name);
|
||||
}
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -59,7 +60,7 @@ public class CommandGroup3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
diagram.startGroup(Display.getWithNewlines(arg.get("NAME", 0)), null, null, null, USymbol.FRAME, 0);
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -55,7 +56,7 @@ public class CommandGroupEnd3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
return diagram.endGroup();
|
||||
}
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -63,7 +64,7 @@ public class CommandIf2 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
final HtmlColor color = diagram.getSkinParam().getIHtmlColorSet().getColorIfValid(arg.get("COLOR", 0));
|
||||
|
||||
String test = arg.get("TEST", 0);
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -64,7 +65,7 @@ public class CommandIf4 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
final HtmlColor color = diagram.getSkinParam().getIHtmlColorSet().getColorIfValid(arg.get("COLOR", 0));
|
||||
|
||||
String test = arg.get("TEST", 0);
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -60,7 +61,7 @@ public class CommandIfLegacy1 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
|
||||
diagram.startIf(Display.getWithNewlines(arg.get("TEST", 0)), Display.getWithNewlines(arg.get("WHEN", 0)), null);
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -56,7 +57,7 @@ public class CommandKill3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
return diagram.kill();
|
||||
}
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -58,7 +59,7 @@ public class CommandLabel extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
|
||||
final String name = arg.get("NAME", 0);
|
||||
return diagram.addLabel(name);
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -59,7 +60,7 @@ public class CommandLink3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
final HtmlColor color = diagram.getSkinParam().getIHtmlColorSet().getColorIfValid(arg.get("COLOR", 0));
|
||||
if (color != null) {
|
||||
diagram.setColorNextArrow(HtmlColorAndStyle.fromColor(color));
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -57,7 +58,7 @@ public class CommandNolink extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
// diagram.setColorNextArrow(color);
|
||||
diagram.setLabelNextArrow(Display.getWithNewlines("NOLINK"));
|
||||
return CommandExecutionResult.ok();
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -71,7 +72,7 @@ public class CommandNote3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
final Colors colors = color().getColor(arg, diagram.getSkinParam().getIHtmlColorSet());
|
||||
final Display note = Display.getWithNewlines(arg.get("NOTE", 0));
|
||||
final NotePosition position = NotePosition.defaultLeft(arg.get("POSITION", 0));
|
||||
|
@ -35,7 +35,6 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.StringUtils;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.BlocLines;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
@ -68,7 +67,7 @@ public class CommandNoteLong3 extends CommandMultilines2<ActivityDiagram3> {
|
||||
|
||||
protected CommandExecutionResult executeNow(final ActivityDiagram3 diagram, BlocLines lines) {
|
||||
// final List<? extends CharSequence> in = StringUtils.removeEmptyColumns2(lines.subList(1, lines.size() - 1));
|
||||
final RegexResult line0 = getStartingPattern().matcher(StringUtils.trin(lines.getFirst499()));
|
||||
final RegexResult line0 = getStartingPattern().matcher(lines.getFirst499().getStringTrimmed());
|
||||
lines = lines.subExtract(1, 1);
|
||||
lines = lines.removeEmptyColumns();
|
||||
final NotePosition position = NotePosition.defaultLeft(line0.get("POSITION", 0));
|
||||
|
@ -36,6 +36,7 @@
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.ColorParam;
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.StringUtils;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
@ -110,7 +111,7 @@ public class CommandPartition3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
final String partitionTitle = StringUtils.eventuallyRemoveStartingAndEndingDoubleQuote(arg.get("NAME", 0));
|
||||
|
||||
final String b1 = arg.get("BACK1", 0);
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -61,7 +62,7 @@ public class CommandRepeat3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
final HtmlColor color = diagram.getSkinParam().getIHtmlColorSet().getColorIfValid(arg.get("COLOR", 0));
|
||||
final Display label = Display.getWithNewlines(arg.get("LABEL", 0));
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -87,7 +88,7 @@ public class CommandRepeatWhile3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
final Display test = Display.getWithNewlines(arg.getLazzy("TEST", 0));
|
||||
final Display yes = Display.getWithNewlines(arg.getLazzy("WHEN", 0));
|
||||
final Display out = Display.getWithNewlines(arg.getLazzy("OUT", 0));
|
||||
|
@ -38,6 +38,7 @@ package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
import java.util.List;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import net.sourceforge.plantuml.StringLocated;
|
||||
import net.sourceforge.plantuml.StringUtils;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.BlocLines;
|
||||
@ -76,8 +77,8 @@ public class CommandRepeatWhile3Multilines extends CommandMultilines3<ActivityDi
|
||||
@Override
|
||||
protected CommandExecutionResult executeNow(ActivityDiagram3 diagram, BlocLines lines) {
|
||||
lines = lines.trim(false);
|
||||
final RegexResult line0 = getStartingPattern().matcher(StringUtils.trin(lines.getFirst499()));
|
||||
final RegexResult lineLast = getPatternEnd2().matcher(lines.getLast499().toString());
|
||||
final RegexResult line0 = getStartingPattern().matcher(StringUtils.trin(lines.getFirst499().getString()));
|
||||
final RegexResult lineLast = getPatternEnd2().matcher(lines.getLast499().getString());
|
||||
|
||||
// System.err.println("line0=" + line0);
|
||||
// System.err.println("linesLast=" + lineLast);
|
||||
@ -87,8 +88,8 @@ public class CommandRepeatWhile3Multilines extends CommandMultilines3<ActivityDi
|
||||
|
||||
final String test = line0.get("TEST1", 0);
|
||||
Display testDisplay = Display.getWithNewlines(test);
|
||||
for (CharSequence s : lines.subExtract(1, 1)) {
|
||||
testDisplay = testDisplay.add(s);
|
||||
for (StringLocated s : lines.subExtract(1, 1)) {
|
||||
testDisplay = testDisplay.add(s.getString());
|
||||
}
|
||||
final String trailTest = lineLast.get("TEST1", 0);
|
||||
if (StringUtils.isEmpty(trailTest) == false) {
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -56,7 +57,7 @@ public class CommandSplit3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
diagram.split();
|
||||
|
||||
return CommandExecutionResult.ok();
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -56,7 +57,7 @@ public class CommandSplitAgain3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
return diagram.splitAgain();
|
||||
|
||||
}
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -56,7 +57,7 @@ public class CommandSplitEnd3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
return diagram.endSplit();
|
||||
}
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -56,7 +57,7 @@ public class CommandStart3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
// if (getSystem().getLastEntityConsulted() == null) {
|
||||
// return CommandExecutionResult.error("No if for this endif");
|
||||
// }
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -56,7 +57,7 @@ public class CommandStop3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
diagram.stop();
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -62,7 +63,7 @@ public class CommandSwimlane extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
final HtmlColor color = diagram.getSkinParam().getIHtmlColorSet().getColorIfValid(arg.get("COLOR", 0));
|
||||
final String name = arg.get("SWIMLANE", 0);
|
||||
final Display label = Display.getWithNewlines(arg.get("LABEL", 0));
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -62,7 +63,7 @@ public class CommandSwimlane2 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
final HtmlColor color = diagram.getSkinParam().getIHtmlColorSet().getColorIfValid(arg.get("COLOR", 0));
|
||||
final String name = arg.get("SWIMLANE", 0);
|
||||
final Display label = Display.getWithNewlines(arg.get("LABEL", 0));
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -65,7 +66,7 @@ public class CommandWhile3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
final HtmlColor color = diagram.getSkinParam().getIHtmlColorSet().getColorIfValid(arg.get("COLOR", 0));
|
||||
diagram.doWhile(Display.getWithNewlines(arg.get("TEST", 0)), Display.getWithNewlines(arg.get("YES", 0)), color);
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ActivityDiagram3;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
@ -57,7 +58,7 @@ public class CommandWhileEnd3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
return diagram.endwhile(Display.getWithNewlines(arg.get("OUT", 0)));
|
||||
}
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.ftile;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.graphic.StringBounder;
|
||||
@ -48,6 +49,11 @@ public class FtileKilled extends AbstractFtile {
|
||||
super(tileToKill.skinParam());
|
||||
this.tile = tileToKill;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Ftile> getMyChildren() {
|
||||
return tile.getMyChildren();
|
||||
}
|
||||
|
||||
public Set<Swimlane> getSwimlanes() {
|
||||
return tile.getSwimlanes();
|
||||
|
@ -39,7 +39,6 @@ import java.awt.geom.Dimension2D;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.sourceforge.plantuml.FontParam;
|
||||
import net.sourceforge.plantuml.ISkinParam;
|
||||
import net.sourceforge.plantuml.Pragma;
|
||||
import net.sourceforge.plantuml.activitydiagram3.Instruction;
|
||||
@ -57,8 +56,6 @@ import net.sourceforge.plantuml.activitydiagram3.ftile.vcompact.UGraphicIntercep
|
||||
import net.sourceforge.plantuml.activitydiagram3.ftile.vcompact.VCompactFactory;
|
||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||
import net.sourceforge.plantuml.graphic.AbstractTextBlock;
|
||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||
import net.sourceforge.plantuml.graphic.HtmlColor;
|
||||
import net.sourceforge.plantuml.graphic.StringBounder;
|
||||
import net.sourceforge.plantuml.graphic.TextBlock;
|
||||
|
@ -35,7 +35,6 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram3.ftile.vcompact;
|
||||
|
||||
import java.awt.geom.Dimension2D;
|
||||
import java.util.List;
|
||||
|
||||
import net.sourceforge.plantuml.ColorParam;
|
||||
@ -97,27 +96,29 @@ public class FtileFactoryDelegatorWhile extends FtileFactoryDelegator {
|
||||
|
||||
final Genealogy genealogy = new Genealogy(result);
|
||||
|
||||
final FtileBreak ftileBreak = (FtileBreak) weldingPoints.get(0);
|
||||
for (WeldingPoint w : weldingPoints) {
|
||||
final FtileBreak ftileBreak = (FtileBreak) w;
|
||||
result = FtileUtils.addConnection(result, new Connection() {
|
||||
public void drawU(UGraphic ug) {
|
||||
final UTranslate tr1 = genealogy.getTranslate(ftileBreak, ug.getStringBounder());
|
||||
|
||||
result = FtileUtils.addConnection(result, new Connection() {
|
||||
public void drawU(UGraphic ug) {
|
||||
final UTranslate tr1 = genealogy.getTranslate(ftileBreak, ug.getStringBounder());
|
||||
final Snake snake = new Snake(getFtile1().arrowHorizontalAlignment(), arrowColor, Arrows
|
||||
.asToLeft());
|
||||
snake.addPoint(tr1.getDx(), tr1.getDy());
|
||||
snake.addPoint(Diamond.diamondHalfSize, tr1.getDy());
|
||||
ug.draw(snake);
|
||||
}
|
||||
|
||||
final Snake snake = new Snake(getFtile1().arrowHorizontalAlignment(), arrowColor, Arrows.asToLeft());
|
||||
snake.addPoint(tr1.getDx(), tr1.getDy());
|
||||
snake.addPoint(Diamond.diamondHalfSize, tr1.getDy());
|
||||
ug.draw(snake);
|
||||
}
|
||||
public Ftile getFtile1() {
|
||||
return ftileBreak;
|
||||
}
|
||||
|
||||
public Ftile getFtile1() {
|
||||
return ftileBreak;
|
||||
}
|
||||
public Ftile getFtile2() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public Ftile getFtile2() {
|
||||
return null;
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -162,7 +162,8 @@ class FtileIfLongHorizontal extends AbstractFtile {
|
||||
final TextBlock tb1 = branch.getLabelPositive().create(fcArrow, HorizontalAlignment.LEFT,
|
||||
ftileFactory.skinParam());
|
||||
final TextBlock tbTest = branch.getLabelTest().create(fcTest,
|
||||
ftileFactory.skinParam().getDefaultTextAlignment(HorizontalAlignment.LEFT), ftileFactory.skinParam());
|
||||
ftileFactory.skinParam().getDefaultTextAlignment(HorizontalAlignment.LEFT),
|
||||
ftileFactory.skinParam());
|
||||
final HtmlColor diamondColor = branch.getColor() == null ? backColor : branch.getColor();
|
||||
|
||||
FtileDiamondInside2 diamond = new FtileDiamondInside2(branch.skinParam(), diamondColor, borderColor,
|
||||
@ -189,12 +190,18 @@ class FtileIfLongHorizontal extends AbstractFtile {
|
||||
final FtileIfLongHorizontal result = new FtileIfLongHorizontal(diamonds, inlabelSizes, tiles, tile2, arrowColor);
|
||||
final List<Connection> conns = new ArrayList<Connection>();
|
||||
|
||||
int nbOut = 0;
|
||||
|
||||
for (int i = 0; i < thens.size(); i++) {
|
||||
final Ftile ftile = tiles.get(i);
|
||||
final Ftile diam = diamonds.get(i);
|
||||
|
||||
final Rainbow rainbowIn = FtileIfWithLinks.getInColor(thens.get(i), arrowColor);
|
||||
final Branch branch = thens.get(i);
|
||||
|
||||
if (branch.getFtile().calculateDimension(ftileFactory.getStringBounder()).hasPointOut()) {
|
||||
nbOut++;
|
||||
}
|
||||
final Rainbow rainbowOut = branch.getInlinkRenderingColorAndStyle();
|
||||
TextBlock out2 = null;
|
||||
if (branch.getSpecial() != null) {
|
||||
@ -218,10 +225,12 @@ class FtileIfLongHorizontal extends AbstractFtile {
|
||||
}
|
||||
|
||||
conns.add(result.new ConnectionLastElseIn(FtileIfWithLinks.getInColor(branch2, arrowColor)));
|
||||
conns.add(result.new ConnectionLastElseOut(arrowColor, out2));
|
||||
final Rainbow horizontalOutColor = afterEndwhile.getRainbow(arrowColor);
|
||||
conns.add(result.new ConnectionHline(horizontalOutColor));
|
||||
// conns.add(result.new ConnectionHline(HtmlColorUtils.BLUE));
|
||||
conns.add(result.new ConnectionLastElseOut(arrowColor, out2, nbOut));
|
||||
final boolean horizontalOut = nbOut > 0;
|
||||
if (horizontalOut) {
|
||||
final Rainbow horizontalOutColor = afterEndwhile.getRainbow(arrowColor);
|
||||
conns.add(result.new ConnectionHline(horizontalOutColor));
|
||||
}
|
||||
|
||||
return FtileUtils.addConnection(result, conns);
|
||||
}
|
||||
@ -329,11 +338,13 @@ class FtileIfLongHorizontal extends AbstractFtile {
|
||||
|
||||
private final Rainbow arrowColor;
|
||||
private final TextBlock out2;
|
||||
private final int nbOut;
|
||||
|
||||
public ConnectionLastElseOut(Rainbow arrowColor, TextBlock out2) {
|
||||
public ConnectionLastElseOut(Rainbow arrowColor, TextBlock out2, int nbOut) {
|
||||
super(tile2, null);
|
||||
this.arrowColor = arrowColor;
|
||||
this.out2 = out2;
|
||||
this.nbOut = nbOut;
|
||||
}
|
||||
|
||||
public void drawU(UGraphic ug) {
|
||||
@ -344,13 +355,17 @@ class FtileIfLongHorizontal extends AbstractFtile {
|
||||
return;
|
||||
}
|
||||
final Point2D p1 = tr1.getTranslated(dim.getPointOut());
|
||||
final double totalHeight = calculateDimensionInternal(stringBounder).getHeight();
|
||||
final FtileGeometry full = calculateDimensionInternal(stringBounder);
|
||||
final double totalHeight = full.getHeight();
|
||||
final Point2D p2 = new Point2D.Double(p1.getX(), totalHeight);
|
||||
|
||||
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||
snake.setLabel(out2);
|
||||
snake.addPoint(p1);
|
||||
snake.addPoint(p2);
|
||||
if (nbOut == 0) {
|
||||
snake.addPoint(new Point2D.Double(full.getLeft(), totalHeight));
|
||||
}
|
||||
ug.draw(snake);
|
||||
}
|
||||
|
||||
|
@ -44,7 +44,6 @@ import net.sourceforge.plantuml.ColorParam;
|
||||
import net.sourceforge.plantuml.Dimension2DDouble;
|
||||
import net.sourceforge.plantuml.FontParam;
|
||||
import net.sourceforge.plantuml.ISkinParam;
|
||||
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||
import net.sourceforge.plantuml.SkinParamUtils;
|
||||
import net.sourceforge.plantuml.activitydiagram3.LinkRendering;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractFtile;
|
||||
|
@ -45,6 +45,8 @@ import net.sourceforge.plantuml.activitydiagram3.ftile.Ftile;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ftile.FtileGeometry;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ftile.Swimlane;
|
||||
import net.sourceforge.plantuml.graphic.HtmlColor;
|
||||
import net.sourceforge.plantuml.graphic.HtmlColorMiddle;
|
||||
import net.sourceforge.plantuml.graphic.HtmlColorUtils;
|
||||
import net.sourceforge.plantuml.graphic.StringBounder;
|
||||
import net.sourceforge.plantuml.ugraphic.UChangeBackColor;
|
||||
import net.sourceforge.plantuml.ugraphic.UChangeColor;
|
||||
@ -54,7 +56,7 @@ import net.sourceforge.plantuml.ugraphic.UTranslate;
|
||||
|
||||
public class FtileCircleStop extends AbstractFtile {
|
||||
|
||||
private static final int SIZE = 20;
|
||||
private static final int SIZE = 22;
|
||||
|
||||
private final HtmlColor backColor;
|
||||
private final Swimlane swimlane;
|
||||
@ -86,26 +88,19 @@ public class FtileCircleStop extends AbstractFtile {
|
||||
}
|
||||
|
||||
public void drawU(UGraphic ug) {
|
||||
double xTheoricalPosition = 0;
|
||||
double yTheoricalPosition = 0;
|
||||
xTheoricalPosition = Math.round(xTheoricalPosition);
|
||||
yTheoricalPosition = Math.round(yTheoricalPosition);
|
||||
|
||||
final UEllipse circle = new UEllipse(SIZE, SIZE);
|
||||
if (skinParam().shadowing(null)) {
|
||||
circle.setDeltaShadow(3);
|
||||
}
|
||||
ug.apply(new UChangeColor(backColor)).apply(new UChangeBackColor(null))
|
||||
.apply(new UTranslate(xTheoricalPosition, yTheoricalPosition)).draw(circle);
|
||||
ug.apply(new UChangeColor(backColor)).apply(new UChangeBackColor(HtmlColorUtils.WHITE)).draw(circle);
|
||||
|
||||
final double delta = 4;
|
||||
final double delta = 5;
|
||||
final UEllipse circleSmall = new UEllipse(SIZE - delta * 2, SIZE - delta * 2);
|
||||
if (skinParam().shadowing(null)) {
|
||||
circleSmall.setDeltaShadow(3);
|
||||
}
|
||||
ug.apply(new UChangeColor(null)).apply(new UChangeBackColor(backColor))
|
||||
.apply(new UTranslate(xTheoricalPosition + delta + .5, yTheoricalPosition + delta + .5))
|
||||
.draw(circleSmall);
|
||||
// if (skinParam().shadowing(null)) {
|
||||
// circleSmall.setDeltaShadow(3);
|
||||
// }
|
||||
ug.apply(new UChangeColor(new HtmlColorMiddle(backColor, HtmlColorUtils.WHITE)))
|
||||
.apply(new UChangeBackColor(backColor)).apply(new UTranslate(delta, delta)).draw(circleSmall);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.bpm;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
import net.sourceforge.plantuml.command.regex.RegexConcat;
|
||||
@ -56,7 +57,7 @@ public class CommandDockedEvent extends SingleLineCommand2<BpmDiagram> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(BpmDiagram diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(BpmDiagram diagram, LineLocation location, RegexResult arg) {
|
||||
|
||||
final String label = arg.get("LABEL", 0);
|
||||
final BpmElement element = new BpmElement(null, BpmElementType.DOCKED_EVENT, label);
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.bpm;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
import net.sourceforge.plantuml.command.regex.RegexConcat;
|
||||
@ -54,7 +55,7 @@ public class CommandElseBranch extends SingleLineCommand2<BpmDiagram> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(BpmDiagram diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(BpmDiagram diagram, LineLocation location, RegexResult arg) {
|
||||
return diagram.elseBranch();
|
||||
}
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.bpm;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
import net.sourceforge.plantuml.command.regex.RegexConcat;
|
||||
@ -54,7 +55,7 @@ public class CommandEndBranch extends SingleLineCommand2<BpmDiagram> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(BpmDiagram diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(BpmDiagram diagram, LineLocation location, RegexResult arg) {
|
||||
return diagram.endBranch();
|
||||
}
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.bpm;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
import net.sourceforge.plantuml.command.regex.RegexConcat;
|
||||
@ -56,7 +57,7 @@ public class CommandGoto extends SingleLineCommand2<BpmDiagram> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(BpmDiagram diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(BpmDiagram diagram, LineLocation location, RegexResult arg) {
|
||||
final BpmEvent event = new BpmEventGoto(arg.get("ID", 0));
|
||||
return diagram.addEvent(event);
|
||||
}
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.bpm;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
import net.sourceforge.plantuml.command.regex.RegexConcat;
|
||||
@ -56,7 +57,7 @@ public class CommandMerge extends SingleLineCommand2<BpmDiagram> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(BpmDiagram diagram, RegexResult arg) {
|
||||
protected CommandExecutionResult executeArg(BpmDiagram diagram, LineLocation location, RegexResult arg) {
|
||||
final BpmEvent event = new BpmEventAdd(new BpmElement(arg.get("ID", 0), BpmElementType.MERGE, null));
|
||||
return diagram.addEvent(event);
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user