mirror of
https://github.com/octoleo/plantuml.git
synced 2024-12-22 10:59:01 +00:00
Merge pull request #329 from SergeWenger/DeepeHistory
Sate deep history first implementation
This commit is contained in:
commit
9ba7d08d52
@ -31,6 +31,7 @@
|
|||||||
*
|
*
|
||||||
* Original Author: Arnaud Roques
|
* Original Author: Arnaud Roques
|
||||||
* Contribution : Hisashi Miyashita
|
* Contribution : Hisashi Miyashita
|
||||||
|
* Contribution : Serge Wenger
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package net.sourceforge.plantuml.cucadiagram;
|
package net.sourceforge.plantuml.cucadiagram;
|
||||||
@ -51,7 +52,7 @@ public enum LeafType {
|
|||||||
|
|
||||||
ACTIVITY, BRANCH, SYNCHRO_BAR, CIRCLE_START, CIRCLE_END, POINT_FOR_ASSOCIATION, ACTIVITY_CONCURRENT,
|
ACTIVITY, BRANCH, SYNCHRO_BAR, CIRCLE_START, CIRCLE_END, POINT_FOR_ASSOCIATION, ACTIVITY_CONCURRENT,
|
||||||
|
|
||||||
STATE, STATE_CONCURRENT, PSEUDO_STATE, STATE_CHOICE, STATE_FORK_JOIN,
|
STATE, STATE_CONCURRENT, PSEUDO_STATE, DEEP_HISTORY, STATE_CHOICE, STATE_FORK_JOIN,
|
||||||
|
|
||||||
BLOCK, ENTITY,
|
BLOCK, ENTITY,
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* Original Author: Arnaud Roques
|
* Original Author: Arnaud Roques
|
||||||
*
|
* Contribution : Serge Wenger
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package net.sourceforge.plantuml.statediagram;
|
package net.sourceforge.plantuml.statediagram;
|
||||||
@ -188,6 +188,34 @@ public class StateDiagram extends AbstractEntityDiagram {
|
|||||||
endGroup();
|
endGroup();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
public IEntity getDeepHistory() {
|
||||||
|
final IGroup g = getCurrentGroup();
|
||||||
|
if (EntityUtils.groupRoot(g)) {
|
||||||
|
final Ident ident = buildLeafIdent("*deephistory");
|
||||||
|
final Code code = buildCode("*deephistory");
|
||||||
|
return getOrCreateLeaf(ident, code, LeafType.DEEP_HISTORY, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
final String idShort = "*deephistory*" + g.getCodeGetName();
|
||||||
|
final Ident ident = buildLeafIdent(idShort);
|
||||||
|
final Code code = this.V1972() ? ident : buildCode(idShort);
|
||||||
|
return getOrCreateLeaf(ident, code, LeafType.DEEP_HISTORY, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEntity getDeepHistory(String idShort) {
|
||||||
|
final Ident idNewLong = buildLeafIdent(idShort);
|
||||||
|
final Code codeGroup = this.V1972() ? idNewLong : buildCode(idShort);
|
||||||
|
gotoGroup(idNewLong, codeGroup, Display.getWithNewlines(codeGroup), GroupType.STATE, getRootGroup(),
|
||||||
|
NamespaceStrategy.SINGLE);
|
||||||
|
final IEntity g = getCurrentGroup();
|
||||||
|
final String tmp = "*deephistory*" + g.getCodeGetName();
|
||||||
|
final Ident ident = buildLeafIdent(tmp);
|
||||||
|
final Code code = this.V1972() ? ident : buildCode(tmp);
|
||||||
|
final IEntity result = getOrCreateLeaf(ident, code, LeafType.DEEP_HISTORY, null);
|
||||||
|
endGroup();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean concurrentState(char direction) {
|
public boolean concurrentState(char direction) {
|
||||||
final IGroup cur = getCurrentGroup();
|
final IGroup cur = getCurrentGroup();
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* Original Author: Arnaud Roques
|
* Original Author: Arnaud Roques
|
||||||
|
* Contribution : Serge Wenger
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -92,7 +93,7 @@ public class CommandLinkState extends SingleLineCommand2<StateDiagram> {
|
|||||||
private static RegexLeaf getStatePattern(String name) {
|
private static RegexLeaf getStatePattern(String name) {
|
||||||
return new RegexLeaf(
|
return new RegexLeaf(
|
||||||
name,
|
name,
|
||||||
"([\\p{L}0-9_.]+|[\\p{L}0-9_.]+\\[H\\]|\\[\\*\\]|\\[H\\]|(?:==+)(?:[\\p{L}0-9_.]+)(?:==+))[%s]*(\\<\\<.*\\>\\>)?[%s]*(#\\w+)?");
|
"([\\p{L}0-9_.]+|[\\p{L}0-9_.]+\\[H\\*?\\]|\\[\\*\\]|\\[H\\*?\\]|(?:==+)(?:[\\p{L}0-9_.]+)(?:==+))[%s]*(\\<\\<.*\\>\\>)?[%s]*(#\\w+)?");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -181,6 +182,12 @@ public class CommandLinkState extends SingleLineCommand2<StateDiagram> {
|
|||||||
if (codeString.endsWith("[H]")) {
|
if (codeString.endsWith("[H]")) {
|
||||||
return diagram.getHistorical(codeString.substring(0, codeString.length() - 3));
|
return diagram.getHistorical(codeString.substring(0, codeString.length() - 3));
|
||||||
}
|
}
|
||||||
|
if (codeString.equalsIgnoreCase("[H*]")) {
|
||||||
|
return diagram.getDeepHistory();
|
||||||
|
}
|
||||||
|
if (codeString.endsWith("[H*]")) {
|
||||||
|
return diagram.getDeepHistory(codeString.substring(0, codeString.length() - 4));
|
||||||
|
}
|
||||||
if (codeString.startsWith("=") && codeString.endsWith("=")) {
|
if (codeString.startsWith("=") && codeString.endsWith("=")) {
|
||||||
final String codeString1 = removeEquals(codeString);
|
final String codeString1 = removeEquals(codeString);
|
||||||
final Ident ident1 = diagram.buildLeafIdent(codeString1);
|
final Ident ident1 = diagram.buildLeafIdent(codeString1);
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
*
|
*
|
||||||
* Original Author: Arnaud Roques
|
* Original Author: Arnaud Roques
|
||||||
* Contribution : Hisashi Miyashita
|
* Contribution : Hisashi Miyashita
|
||||||
|
* Contribution : Serge Wenger
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -111,6 +112,7 @@ import net.sourceforge.plantuml.svek.image.EntityImageBranch;
|
|||||||
import net.sourceforge.plantuml.svek.image.EntityImageCircleEnd;
|
import net.sourceforge.plantuml.svek.image.EntityImageCircleEnd;
|
||||||
import net.sourceforge.plantuml.svek.image.EntityImageCircleStart;
|
import net.sourceforge.plantuml.svek.image.EntityImageCircleStart;
|
||||||
import net.sourceforge.plantuml.svek.image.EntityImageClass;
|
import net.sourceforge.plantuml.svek.image.EntityImageClass;
|
||||||
|
import net.sourceforge.plantuml.svek.image.EntityImageDeepHistory;
|
||||||
import net.sourceforge.plantuml.svek.image.EntityImageDescription;
|
import net.sourceforge.plantuml.svek.image.EntityImageDescription;
|
||||||
import net.sourceforge.plantuml.svek.image.EntityImageEmptyPackage;
|
import net.sourceforge.plantuml.svek.image.EntityImageEmptyPackage;
|
||||||
import net.sourceforge.plantuml.svek.image.EntityImageGroup;
|
import net.sourceforge.plantuml.svek.image.EntityImageGroup;
|
||||||
@ -249,6 +251,10 @@ public final class GeneralImageBuilder {
|
|||||||
if (leaf.getLeafType() == LeafType.PSEUDO_STATE) {
|
if (leaf.getLeafType() == LeafType.PSEUDO_STATE) {
|
||||||
return new EntityImagePseudoState(leaf, skinParam);
|
return new EntityImagePseudoState(leaf, skinParam);
|
||||||
}
|
}
|
||||||
|
if (leaf.getLeafType() == LeafType.DEEP_HISTORY) {
|
||||||
|
return new EntityImageDeepHistory(leaf, skinParam);
|
||||||
|
}
|
||||||
|
|
||||||
if (leaf.getLeafType() == LeafType.TIPS) {
|
if (leaf.getLeafType() == LeafType.TIPS) {
|
||||||
return new EntityImageTips(leaf, skinParam, bibliotekon);
|
return new EntityImageTips(leaf, skinParam, bibliotekon);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,47 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* 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
|
||||||
|
* Contribution : Serge Wenger
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package net.sourceforge.plantuml.svek.image;
|
||||||
|
|
||||||
|
import net.sourceforge.plantuml.cucadiagram.ILeaf;
|
||||||
|
import net.sourceforge.plantuml.ISkinParam;
|
||||||
|
|
||||||
|
public class EntityImageDeepHistory extends EntityImagePseudoState {
|
||||||
|
|
||||||
|
public EntityImageDeepHistory(ILeaf entity, ISkinParam skinParam) {
|
||||||
|
super(entity, skinParam, "H*");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -62,11 +62,13 @@ public class EntityImagePseudoState extends AbstractEntityImage {
|
|||||||
private final TextBlock desc;
|
private final TextBlock desc;
|
||||||
|
|
||||||
public EntityImagePseudoState(ILeaf entity, ISkinParam skinParam) {
|
public EntityImagePseudoState(ILeaf entity, ISkinParam skinParam) {
|
||||||
|
this(entity, skinParam, "H");
|
||||||
|
}
|
||||||
|
public EntityImagePseudoState(ILeaf entity, ISkinParam skinParam, String historyText) {
|
||||||
super(entity, skinParam);
|
super(entity, skinParam);
|
||||||
final Stereotype stereotype = entity.getStereotype();
|
final Stereotype stereotype = entity.getStereotype();
|
||||||
this.desc = Display.create("H").create(new FontConfiguration(getSkinParam(), FontParam.STATE, stereotype),
|
this.desc = Display.create(historyText).create(new FontConfiguration(getSkinParam(), FontParam.STATE, stereotype),
|
||||||
HorizontalAlignment.CENTER, skinParam);
|
HorizontalAlignment.CENTER, skinParam);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Dimension2D calculateDimension(StringBounder stringBounder) {
|
public Dimension2D calculateDimension(StringBounder stringBounder) {
|
||||||
|
Loading…
Reference in New Issue
Block a user