diff options
Diffstat (limited to 'src/net/sourceforge/plantuml/sequencediagram/command/CommandReturn.java')
-rw-r--r-- | src/net/sourceforge/plantuml/sequencediagram/command/CommandReturn.java | 62 |
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(); } - } |