summaryrefslogtreecommitdiff
path: root/src/net/sourceforge/plantuml/sequencediagram/command/CommandReturn.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/sourceforge/plantuml/sequencediagram/command/CommandReturn.java')
-rw-r--r--src/net/sourceforge/plantuml/sequencediagram/command/CommandReturn.java62
1 files changed, 42 insertions, 20 deletions
diff --git a/src/net/sourceforge/plantuml/sequencediagram/command/CommandReturn.java b/src/net/sourceforge/plantuml/sequencediagram/command/CommandReturn.java
index 50f21da..1f81d45 100644
--- a/src/net/sourceforge/plantuml/sequencediagram/command/CommandReturn.java
+++ b/src/net/sourceforge/plantuml/sequencediagram/command/CommandReturn.java
@@ -2,7 +2,7 @@
* PlantUML : a free UML diagram generator
* ========================================================================
*
- * (C) Copyright 2009-2017, Arnaud Roques
+ * (C) Copyright 2009-2020, Arnaud Roques
*
* Project Info: http://plantuml.com
*
@@ -35,15 +35,22 @@
*/
package net.sourceforge.plantuml.sequencediagram.command;
+import net.sourceforge.plantuml.LineLocation;
import net.sourceforge.plantuml.command.CommandExecutionResult;
import net.sourceforge.plantuml.command.SingleLineCommand2;
+import net.sourceforge.plantuml.command.regex.IRegex;
import net.sourceforge.plantuml.command.regex.RegexConcat;
import net.sourceforge.plantuml.command.regex.RegexLeaf;
+import net.sourceforge.plantuml.command.regex.RegexOptional;
import net.sourceforge.plantuml.command.regex.RegexResult;
import net.sourceforge.plantuml.cucadiagram.Display;
+import net.sourceforge.plantuml.graphic.HtmlColorSet;
+import net.sourceforge.plantuml.sequencediagram.AbstractMessage;
import net.sourceforge.plantuml.sequencediagram.EventWithDeactivate;
import net.sourceforge.plantuml.sequencediagram.LifeEventType;
import net.sourceforge.plantuml.sequencediagram.Message;
+import net.sourceforge.plantuml.sequencediagram.MessageExo;
+import net.sourceforge.plantuml.sequencediagram.MessageExoType;
import net.sourceforge.plantuml.sequencediagram.SequenceDiagram;
import net.sourceforge.plantuml.skin.ArrowBody;
import net.sourceforge.plantuml.skin.ArrowConfiguration;
@@ -54,22 +61,27 @@ public class CommandReturn extends SingleLineCommand2<SequenceDiagram> {
super(getRegexConcat());
}
- private static RegexConcat getRegexConcat() {
- return new RegexConcat(new RegexLeaf("^"), //
- new RegexLeaf("PARALLEL", "(&%s*)?"), //
- new RegexLeaf("[%s]*"), //
- new RegexLeaf("return[%s]*"), //
- new RegexLeaf("MESSAGE", "(.*)"), //
- new RegexLeaf("$"));
+ private static IRegex getRegexConcat() {
+ return RegexConcat.build(CommandReturn.class.getName(), RegexLeaf.start(), //
+ new RegexLeaf("PARALLEL", "(&[%s]*)?"), //
+ RegexLeaf.spaceZeroOrMore(), //
+ new RegexLeaf("return"), //
+ RegexLeaf.spaceZeroOrMore(), //
+ new RegexOptional( //
+ new RegexConcat( //
+ new RegexLeaf("COLOR", "(#\\w+)"), //
+ RegexLeaf.spaceOneOrMore() //
+ )), //
+ new RegexLeaf("MESSAGE", "(.*)"), RegexLeaf.end());
}
@Override
- protected CommandExecutionResult executeArg(SequenceDiagram sequenceDiagram, RegexResult arg) {
+ protected CommandExecutionResult executeArg(SequenceDiagram diagram, LineLocation location, RegexResult arg) {
- Message message1 = sequenceDiagram.getActivatingMessage();
+ AbstractMessage message1 = diagram.getActivatingMessage();
boolean doDeactivation = true;
if (message1 == null) {
- final EventWithDeactivate last = sequenceDiagram.getLastEventWithDeactivate();
+ final EventWithDeactivate last = diagram.getLastEventWithDeactivate();
if (last instanceof Message == false) {
return CommandExecutionResult.error("Nowhere to return to.");
}
@@ -77,19 +89,30 @@ public class CommandReturn extends SingleLineCommand2<SequenceDiagram> {
doDeactivation = false;
}
- final ArrowConfiguration arrow = message1.getArrowConfiguration().withBody(ArrowBody.DOTTED);
+ ArrowConfiguration arrow = message1.getArrowConfiguration().withBody(ArrowBody.DOTTED);
+ final String color = arg.get("COLOR", 0);
+ if (color != null) {
+ arrow = arrow.withColor(HtmlColorSet.getInstance().getColorIfValid(color));
+ }
final Display display = Display.getWithNewlines(arg.get("MESSAGE", 0));
- final Message message2 = new Message(message1.getParticipant2(), message1.getParticipant1(), display, arrow,
- sequenceDiagram.getNextMessageNumber());
- final boolean parallel = arg.get("PARALLEL", 0) != null;
- if (parallel) {
- message2.goParallel();
+ final AbstractMessage message2;
+ if (message1 instanceof MessageExo) {
+ final MessageExo exo1 = (MessageExo) message1;
+ message2 = new MessageExo(diagram.getSkinParam().getCurrentStyleBuilder(), exo1.getParticipant(), exo1
+ .getType().reverse(), display, arrow, diagram.getNextMessageNumber(), false);
+ } else {
+ message2 = new Message(diagram.getSkinParam().getCurrentStyleBuilder(), message1.getParticipant2(),
+ message1.getParticipant1(), display, arrow, diagram.getNextMessageNumber());
+ final boolean parallel = arg.get("PARALLEL", 0) != null;
+ if (parallel) {
+ message2.goParallel();
+ }
}
- sequenceDiagram.addMessage(message2);
+ diagram.addMessage(message2);
if (doDeactivation) {
- final String error = sequenceDiagram.activate(message1.getParticipant2(), LifeEventType.DEACTIVATE, null);
+ final String error = diagram.activate(message1.getParticipant2(), LifeEventType.DEACTIVATE, null);
if (error != null) {
return CommandExecutionResult.error(error);
}
@@ -97,5 +120,4 @@ public class CommandReturn extends SingleLineCommand2<SequenceDiagram> {
return CommandExecutionResult.ok();
}
-
}