mirror of
https://github.com/octoleo/plantuml.git
synced 2024-11-30 00:33:53 +00:00
Merge branch 'wip'
This commit is contained in:
commit
742542290a
@ -133,7 +133,7 @@ public class CommandCreateClass extends SingleLineCommand2<ClassDiagram> {
|
|||||||
final String genericOption = arg.getLazzy("DISPLAY", 1);
|
final String genericOption = arg.getLazzy("DISPLAY", 1);
|
||||||
final String generic = genericOption != null ? genericOption : arg.get("GENERIC", 0);
|
final String generic = genericOption != null ? genericOption : arg.get("GENERIC", 0);
|
||||||
|
|
||||||
final String stereotype = arg.get("STEREO", 0);
|
final String stereo = arg.get("STEREO", 0);
|
||||||
final ILeaf entity;
|
final ILeaf entity;
|
||||||
final Ident idNewLong = diagram.buildLeafIdent(idShort);
|
final Ident idNewLong = diagram.buildLeafIdent(idShort);
|
||||||
if (diagram.V1972()) {
|
if (diagram.V1972()) {
|
||||||
@ -156,10 +156,11 @@ public class CommandCreateClass extends SingleLineCommand2<ClassDiagram> {
|
|||||||
entity = diagram.createLeaf(idNewLong, code, Display.getWithNewlines(display), type, null);
|
entity = diagram.createLeaf(idNewLong, code, Display.getWithNewlines(display), type, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (stereotype != null) {
|
if (stereo != null) {
|
||||||
entity.setStereotype(Stereotype.build(stereotype, diagram.getSkinParam().getCircledCharacterRadius(),
|
entity.setStereotype(Stereotype.build(stereo, diagram.getSkinParam().getCircledCharacterRadius(),
|
||||||
diagram.getSkinParam().getFont(null, false, FontParam.CIRCLED_CHARACTER),
|
diagram.getSkinParam().getFont(null, false, FontParam.CIRCLED_CHARACTER),
|
||||||
diagram.getSkinParam().getIHtmlColorSet()));
|
diagram.getSkinParam().getIHtmlColorSet()));
|
||||||
|
entity.setStereostyle(stereo);
|
||||||
}
|
}
|
||||||
if (generic != null) {
|
if (generic != null) {
|
||||||
entity.setGeneric(generic);
|
entity.setGeneric(generic);
|
||||||
|
@ -49,8 +49,7 @@ import net.sourceforge.plantuml.ugraphic.color.NoSuchColorRuntimeException;
|
|||||||
|
|
||||||
public class CommandCreoleColorChange implements Command {
|
public class CommandCreoleColorChange implements Command {
|
||||||
|
|
||||||
private static final Pattern2 pattern = MyPattern
|
private static final Pattern2 pattern = MyPattern.cmpile("^(" + Splitter.fontColorPattern2 + "(.*?)\\</color\\>)");
|
||||||
.cmpile("^(" + Splitter.fontColorPattern2 + "(.*?)\\</color\\>)");
|
|
||||||
|
|
||||||
private static final Pattern2 patternEol = MyPattern.cmpile("^(" + Splitter.fontColorPattern2 + "(.*)$)");
|
private static final Pattern2 patternEol = MyPattern.cmpile("^(" + Splitter.fontColorPattern2 + "(.*)$)");
|
||||||
|
|
||||||
@ -90,12 +89,13 @@ public class CommandCreoleColorChange implements Command {
|
|||||||
final HColor color = HColorSet.instance().getColor(themeStyle, s);
|
final HColor color = HColorSet.instance().getColor(themeStyle, s);
|
||||||
final FontConfiguration fc2 = fc1.changeColor(color);
|
final FontConfiguration fc2 = fc1.changeColor(color);
|
||||||
stripe.setActualFontConfiguration(fc2);
|
stripe.setActualFontConfiguration(fc2);
|
||||||
|
} catch (NoSuchColorException e) {
|
||||||
|
// Too late for parsing error
|
||||||
|
// So we just ignore
|
||||||
|
}
|
||||||
stripe.analyzeAndAdd(m.group(3));
|
stripe.analyzeAndAdd(m.group(3));
|
||||||
stripe.setActualFontConfiguration(fc1);
|
stripe.setActualFontConfiguration(fc1);
|
||||||
return line.substring(m.group(1).length());
|
return line.substring(m.group(1).length());
|
||||||
} catch (NoSuchColorException e) {
|
|
||||||
throw new NoSuchColorRuntimeException();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -66,6 +66,7 @@ public class GroupRoot implements IGroup {
|
|||||||
this.entityFactory = entityFactory;
|
this.entityFactory = entityFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Collection<ILeaf> getLeafsDirect() {
|
public Collection<ILeaf> getLeafsDirect() {
|
||||||
final List<ILeaf> result = new ArrayList<>();
|
final List<ILeaf> result = new ArrayList<>();
|
||||||
for (ILeaf ent : entityFactory.leafs()) {
|
for (ILeaf ent : entityFactory.leafs()) {
|
||||||
@ -82,71 +83,79 @@ public class GroupRoot implements IGroup {
|
|||||||
return "ROOT";
|
return "ROOT";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isGroup() {
|
public boolean isGroup() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Display getDisplay() {
|
public Display getDisplay() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void setDisplay(Display display) {
|
public void setDisplay(Display display) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public LeafType getLeafType() {
|
public LeafType getLeafType() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getUid() {
|
public String getUid() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Url getUrl99() {
|
public Url getUrl99() {
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Stereotype getStereotype() {
|
public Stereotype getStereotype() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void setStereotype(Stereotype stereotype) {
|
public void setStereotype(Stereotype stereotype) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public TextBlock getBody(PortionShower portionShower, FontParam fontParam, ISkinParam skinParam) {
|
|
||||||
throw new UnsupportedOperationException();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Code getCode() {
|
public Code getCode() {
|
||||||
return CodeImpl.of("__ROOT__");
|
return CodeImpl.of("__ROOT__");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getCodeGetName() {
|
public String getCodeGetName() {
|
||||||
return getCode().getName();
|
return getCode().getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void addUrl(Url url) {
|
public void addUrl(Url url) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public IGroup getParentContainer() {
|
public IGroup getParentContainer() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean containsLeafRecurse(ILeaf entity) {
|
public boolean containsLeafRecurse(ILeaf entity) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Collection<IGroup> getChildren() {
|
public Collection<IGroup> getChildren() {
|
||||||
final List<IGroup> result = new ArrayList<>();
|
final List<IGroup> result = new ArrayList<>();
|
||||||
if (entityFactory.namespaceSeparator.V1972()) {
|
if (entityFactory.namespaceSeparator.V1972()) {
|
||||||
@ -166,93 +175,105 @@ public class GroupRoot implements IGroup {
|
|||||||
return Collections.unmodifiableCollection(result);
|
return Collections.unmodifiableCollection(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void moveEntitiesTo(IGroup dest) {
|
public void moveEntitiesTo(IGroup dest) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int size() {
|
public int size() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public GroupType getGroupType() {
|
public GroupType getGroupType() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Code getNamespace() {
|
public Code getNamespace() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public PackageStyle getPackageStyle() {
|
public PackageStyle getPackageStyle() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void overrideImage(IEntityImage img, LeafType state) {
|
public void overrideImage(IEntityImage img, LeafType state) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isHidden() {
|
public boolean isHidden() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public USymbol getUSymbol() {
|
public USymbol getUSymbol() {
|
||||||
return null;
|
return null;
|
||||||
// throw new UnsupportedOperationException();
|
// throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void setUSymbol(USymbol symbol) {
|
public void setUSymbol(USymbol symbol) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public SingleStrategy getSingleStrategy() {
|
public SingleStrategy getSingleStrategy() {
|
||||||
return SingleStrategy.SQUARE;
|
return SingleStrategy.SQUARE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isRemoved() {
|
public boolean isRemoved() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean hasUrl() {
|
public boolean hasUrl() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getHectorLayer() {
|
@Override
|
||||||
throw new UnsupportedOperationException();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHectorLayer(int layer) {
|
|
||||||
throw new UnsupportedOperationException();
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getRawLayout() {
|
public int getRawLayout() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public char getConcurrentSeparator() {
|
public char getConcurrentSeparator() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void setConcurrentSeparator(char separator) {
|
public void setConcurrentSeparator(char separator) {
|
||||||
// throw new UnsupportedOperationException();
|
// throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void putTip(String member, Display display) {
|
public void putTip(String member, Display display) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Map<String, Display> getTips() {
|
public Map<String, Display> getTips() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Bodier getBodier() {
|
public Bodier getBodier() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Colors getColors(ISkinParam skinParam) {
|
public Colors getColors(ISkinParam skinParam) {
|
||||||
return Colors.empty();
|
return Colors.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void setColors(Colors colors) {
|
public void setColors(Colors colors) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
@ -277,31 +298,48 @@ public class GroupRoot implements IGroup {
|
|||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void setLegend(DisplayPositionned legend) {
|
public void setLegend(DisplayPositionned legend) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public DisplayPositionned getLegend() {
|
public DisplayPositionned getLegend() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Ident getIdent() {
|
public Ident getIdent() {
|
||||||
return Ident.empty();
|
return Ident.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isAloneAndUnlinked() {
|
public boolean isAloneAndUnlinked() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void setThisIsTogether() {
|
public void setThisIsTogether() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getCodeLine() {
|
public String getCodeLine() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void setCodeLine(LineLocation codeLine) {
|
public void setCodeLine(LineLocation codeLine) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setStereostyle(String stereo) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Stereostyles getStereostyles() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -82,10 +82,6 @@ public interface IEntity extends SpecificBackcolorable, Hideable, Removeable, Li
|
|||||||
|
|
||||||
public boolean hasUrl();
|
public boolean hasUrl();
|
||||||
|
|
||||||
public int getHectorLayer();
|
|
||||||
|
|
||||||
public void setHectorLayer(int layer);
|
|
||||||
|
|
||||||
public int getRawLayout();
|
public int getRawLayout();
|
||||||
|
|
||||||
public void putTip(String member, Display display);
|
public void putTip(String member, Display display);
|
||||||
@ -104,4 +100,8 @@ public interface IEntity extends SpecificBackcolorable, Hideable, Removeable, Li
|
|||||||
|
|
||||||
public void setCodeLine(LineLocation codeLine);
|
public void setCodeLine(LineLocation codeLine);
|
||||||
|
|
||||||
|
public void setStereostyle(String stereo);
|
||||||
|
|
||||||
|
public Stereostyles getStereostyles();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
74
src/net/sourceforge/plantuml/cucadiagram/Stereostyles.java
Normal file
74
src/net/sourceforge/plantuml/cucadiagram/Stereostyles.java
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* 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.cucadiagram;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import net.sourceforge.plantuml.command.regex.Matcher2;
|
||||||
|
import net.sourceforge.plantuml.command.regex.MyPattern;
|
||||||
|
import net.sourceforge.plantuml.command.regex.Pattern2;
|
||||||
|
|
||||||
|
public class Stereostyles {
|
||||||
|
|
||||||
|
public static final Stereostyles NONE = new Stereostyles();
|
||||||
|
|
||||||
|
private final Set<String> names = new LinkedHashSet<String>();
|
||||||
|
|
||||||
|
private Stereostyles() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return names.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Stereostyles build(String label) {
|
||||||
|
final Stereostyles result = new Stereostyles();
|
||||||
|
final Pattern2 p = MyPattern.cmpile("\\<{3}(.*?)\\>{3}");
|
||||||
|
final Matcher2 m = p.matcher(label);
|
||||||
|
while (m.find()) {
|
||||||
|
result.names.add(m.group(1));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<String> getStyleNames() {
|
||||||
|
return Collections.unmodifiableCollection(names);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -66,6 +66,7 @@ import net.sourceforge.plantuml.cucadiagram.ILeaf;
|
|||||||
import net.sourceforge.plantuml.cucadiagram.Ident;
|
import net.sourceforge.plantuml.cucadiagram.Ident;
|
||||||
import net.sourceforge.plantuml.cucadiagram.LeafType;
|
import net.sourceforge.plantuml.cucadiagram.LeafType;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Link;
|
import net.sourceforge.plantuml.cucadiagram.Link;
|
||||||
|
import net.sourceforge.plantuml.cucadiagram.Stereostyles;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Stereotag;
|
import net.sourceforge.plantuml.cucadiagram.Stereotag;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Stereotype;
|
import net.sourceforge.plantuml.cucadiagram.Stereotype;
|
||||||
import net.sourceforge.plantuml.cucadiagram.dot.Neighborhood;
|
import net.sourceforge.plantuml.cucadiagram.dot.Neighborhood;
|
||||||
@ -98,6 +99,7 @@ final public class EntityImpl implements ILeaf, IGroup {
|
|||||||
|
|
||||||
private LeafType leafType;
|
private LeafType leafType;
|
||||||
private Stereotype stereotype;
|
private Stereotype stereotype;
|
||||||
|
private Stereostyles stereostyles = Stereostyles.NONE;
|
||||||
private String generic;
|
private String generic;
|
||||||
private IGroup parentContainer;
|
private IGroup parentContainer;
|
||||||
|
|
||||||
@ -662,19 +664,6 @@ final public class EntityImpl implements ILeaf, IGroup {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int layer;
|
|
||||||
|
|
||||||
public int getHectorLayer() {
|
|
||||||
return layer;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHectorLayer(int layer) {
|
|
||||||
this.layer = layer;
|
|
||||||
if (layer > 1000) {
|
|
||||||
throw new IllegalArgumentException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private FontParam getTitleFontParam() {
|
private FontParam getTitleFontParam() {
|
||||||
if (symbol != null) {
|
if (symbol != null) {
|
||||||
return symbol.getFontParam();
|
return symbol.getFontParam();
|
||||||
@ -804,4 +793,14 @@ final public class EntityImpl implements ILeaf, IGroup {
|
|||||||
this.codeLine = codeLine;
|
this.codeLine = codeLine;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setStereostyle(String stereo) {
|
||||||
|
this.stereostyles = Stereostyles.build(stereo);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Stereostyles getStereostyles() {
|
||||||
|
return stereostyles;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@ public class NBox implements Staged {
|
|||||||
|
|
||||||
public void add(NBar bar) {
|
public void add(NBar bar) {
|
||||||
if (this.bars.contains(bar)) {
|
if (this.bars.contains(bar)) {
|
||||||
throw new IllegalStateException();
|
return;
|
||||||
}
|
}
|
||||||
this.bars.add(bar);
|
this.bars.add(bar);
|
||||||
this.tetris.add(bar);
|
this.tetris.add(bar);
|
||||||
|
@ -83,7 +83,7 @@ public class Participant implements SpecificBackcolorable, WithStyle {
|
|||||||
final StyleSignature signature = getDefaultStyleDefinition().with(stereotype);
|
final StyleSignature signature = getDefaultStyleDefinition().with(stereotype);
|
||||||
Style tmp = signature.getMergedStyle(styleBuilder);
|
Style tmp = signature.getMergedStyle(styleBuilder);
|
||||||
tmp = tmp.eventuallyOverride(getColors(null));
|
tmp = tmp.eventuallyOverride(getColors(null));
|
||||||
Style stereo = getDefaultStyleDefinition().withStereotype(stereotype).getMergedStyle(styleBuilder);
|
Style stereo = getDefaultStyleDefinition().forStereotypeItself(stereotype).getMergedStyle(styleBuilder);
|
||||||
if (tmp != null) {
|
if (tmp != null) {
|
||||||
stereo = tmp.mergeWith(stereo);
|
stereo = tmp.mergeWith(stereo);
|
||||||
}
|
}
|
||||||
|
@ -59,6 +59,7 @@ import net.sourceforge.plantuml.statediagram.command.CommandCreatePackageState;
|
|||||||
import net.sourceforge.plantuml.statediagram.command.CommandCreateState;
|
import net.sourceforge.plantuml.statediagram.command.CommandCreateState;
|
||||||
import net.sourceforge.plantuml.statediagram.command.CommandEndState;
|
import net.sourceforge.plantuml.statediagram.command.CommandEndState;
|
||||||
import net.sourceforge.plantuml.statediagram.command.CommandLinkState;
|
import net.sourceforge.plantuml.statediagram.command.CommandLinkState;
|
||||||
|
import net.sourceforge.plantuml.statediagram.command.CommandLinkStateReverse;
|
||||||
|
|
||||||
public class StateDiagramFactory extends PSystemCommandFactory {
|
public class StateDiagramFactory extends PSystemCommandFactory {
|
||||||
|
|
||||||
@ -75,6 +76,7 @@ public class StateDiagramFactory extends PSystemCommandFactory {
|
|||||||
cmds.add(new CommandRemoveRestore());
|
cmds.add(new CommandRemoveRestore());
|
||||||
cmds.add(new CommandCreateState());
|
cmds.add(new CommandCreateState());
|
||||||
cmds.add(new CommandLinkState());
|
cmds.add(new CommandLinkState());
|
||||||
|
cmds.add(new CommandLinkStateReverse());
|
||||||
cmds.add(new CommandCreatePackageState());
|
cmds.add(new CommandCreatePackageState());
|
||||||
cmds.add(new CommandEndState());
|
cmds.add(new CommandEndState());
|
||||||
cmds.add(new CommandAddField());
|
cmds.add(new CommandAddField());
|
||||||
|
@ -36,31 +36,12 @@
|
|||||||
*/
|
*/
|
||||||
package net.sourceforge.plantuml.statediagram.command;
|
package net.sourceforge.plantuml.statediagram.command;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.Direction;
|
|
||||||
import net.sourceforge.plantuml.LineLocation;
|
|
||||||
import net.sourceforge.plantuml.StringUtils;
|
|
||||||
import net.sourceforge.plantuml.UmlDiagramType;
|
|
||||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
|
||||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
|
||||||
import net.sourceforge.plantuml.command.regex.RegexConcat;
|
import net.sourceforge.plantuml.command.regex.RegexConcat;
|
||||||
import net.sourceforge.plantuml.command.regex.RegexLeaf;
|
import net.sourceforge.plantuml.command.regex.RegexLeaf;
|
||||||
import net.sourceforge.plantuml.command.regex.RegexOptional;
|
import net.sourceforge.plantuml.command.regex.RegexOptional;
|
||||||
import net.sourceforge.plantuml.command.regex.RegexResult;
|
|
||||||
import net.sourceforge.plantuml.cucadiagram.Code;
|
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
|
||||||
import net.sourceforge.plantuml.cucadiagram.IEntity;
|
|
||||||
import net.sourceforge.plantuml.cucadiagram.Ident;
|
|
||||||
import net.sourceforge.plantuml.cucadiagram.LeafType;
|
|
||||||
import net.sourceforge.plantuml.cucadiagram.Link;
|
|
||||||
import net.sourceforge.plantuml.cucadiagram.LinkDecor;
|
|
||||||
import net.sourceforge.plantuml.cucadiagram.LinkType;
|
|
||||||
import net.sourceforge.plantuml.cucadiagram.Stereotype;
|
|
||||||
import net.sourceforge.plantuml.descdiagram.command.CommandLinkElement;
|
import net.sourceforge.plantuml.descdiagram.command.CommandLinkElement;
|
||||||
import net.sourceforge.plantuml.graphic.color.ColorType;
|
|
||||||
import net.sourceforge.plantuml.statediagram.StateDiagram;
|
|
||||||
import net.sourceforge.plantuml.ugraphic.color.NoSuchColorException;
|
|
||||||
|
|
||||||
public class CommandLinkState extends SingleLineCommand2<StateDiagram> {
|
public class CommandLinkState extends CommandLinkStateCommon {
|
||||||
|
|
||||||
public CommandLinkState() {
|
public CommandLinkState() {
|
||||||
super(getRegex());
|
super(getRegex());
|
||||||
@ -91,128 +72,4 @@ public class CommandLinkState extends SingleLineCommand2<StateDiagram> {
|
|||||||
)), RegexLeaf.end());
|
)), RegexLeaf.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static RegexLeaf getStatePattern(String name) {
|
|
||||||
return new RegexLeaf(name,
|
|
||||||
"([%pLN_.:]+|[%pLN_.:]+\\[H\\*?\\]|\\[\\*\\]|\\[H\\*?\\]|(?:==+)(?:[%pLN_.:]+)(?:==+))[%s]*(\\<\\<.*\\>\\>)?[%s]*(#\\w+)?");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected CommandExecutionResult executeArg(StateDiagram diagram, LineLocation location, RegexResult arg)
|
|
||||||
throws NoSuchColorException {
|
|
||||||
final String ent1 = arg.get("ENT1", 0);
|
|
||||||
final String ent2 = arg.get("ENT2", 0);
|
|
||||||
|
|
||||||
final IEntity cl1 = getEntityStart(diagram, ent1);
|
|
||||||
if (cl1 == null) {
|
|
||||||
return CommandExecutionResult
|
|
||||||
.error("The state " + ent1 + " has been created in a concurrent state : it cannot be used here.");
|
|
||||||
}
|
|
||||||
final IEntity cl2 = getEntityEnd(diagram, ent2);
|
|
||||||
if (cl2 == null) {
|
|
||||||
return CommandExecutionResult
|
|
||||||
.error("The state " + ent2 + " has been created in a concurrent state : it cannot be used here.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (arg.get("ENT1", 1) != null) {
|
|
||||||
cl1.setStereotype(Stereotype.build(arg.get("ENT1", 1)));
|
|
||||||
}
|
|
||||||
if (arg.get("ENT1", 2) != null) {
|
|
||||||
final String s = arg.get("ENT1", 2);
|
|
||||||
cl1.setSpecificColorTOBEREMOVED(ColorType.BACK,
|
|
||||||
diagram.getSkinParam().getIHtmlColorSet().getColor(diagram.getSkinParam().getThemeStyle(), s));
|
|
||||||
}
|
|
||||||
if (arg.get("ENT2", 1) != null) {
|
|
||||||
cl2.setStereotype(Stereotype.build(arg.get("ENT2", 1)));
|
|
||||||
}
|
|
||||||
if (arg.get("ENT2", 2) != null) {
|
|
||||||
final String s = arg.get("ENT2", 2);
|
|
||||||
cl2.setSpecificColorTOBEREMOVED(ColorType.BACK,
|
|
||||||
diagram.getSkinParam().getIHtmlColorSet().getColor(diagram.getSkinParam().getThemeStyle(), s));
|
|
||||||
}
|
|
||||||
|
|
||||||
String queue = arg.get("ARROW_BODY1", 0) + arg.get("ARROW_BODY2", 0);
|
|
||||||
final Direction dir = getDirection(arg);
|
|
||||||
|
|
||||||
if (dir == Direction.LEFT || dir == Direction.RIGHT) {
|
|
||||||
queue = "-";
|
|
||||||
}
|
|
||||||
|
|
||||||
final int lenght = queue.length();
|
|
||||||
|
|
||||||
final boolean crossStart = arg.get("ARROW_CROSS_START", 0) != null;
|
|
||||||
final boolean circleEnd = arg.get("ARROW_CIRCLE_END", 0) != null;
|
|
||||||
final LinkType linkType = new LinkType(circleEnd ? LinkDecor.ARROW_AND_CIRCLE : LinkDecor.ARROW,
|
|
||||||
crossStart ? LinkDecor.CIRCLE_CROSS : LinkDecor.NONE);
|
|
||||||
|
|
||||||
final Display label = Display.getWithNewlines(arg.get("LABEL", 0));
|
|
||||||
Link link = new Link(cl1, cl2, linkType, label, lenght, diagram.getSkinParam().getCurrentStyleBuilder());
|
|
||||||
if (dir == Direction.LEFT || dir == Direction.UP) {
|
|
||||||
link = link.getInv();
|
|
||||||
}
|
|
||||||
link.applyStyle(diagram.getSkinParam().getThemeStyle(), arg.getLazzy("ARROW_STYLE", 0));
|
|
||||||
link.setUmlDiagramType(UmlDiagramType.STATE);
|
|
||||||
diagram.addLink(link);
|
|
||||||
|
|
||||||
return CommandExecutionResult.ok();
|
|
||||||
}
|
|
||||||
|
|
||||||
private Direction getDirection(RegexResult arg) {
|
|
||||||
final String arrowDirection = arg.get("ARROW_DIRECTION", 0);
|
|
||||||
if (arrowDirection != null) {
|
|
||||||
return StringUtils.getQueueDirection(arrowDirection);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private IEntity getEntityStart(StateDiagram diagram, final String codeString) {
|
|
||||||
if (codeString.startsWith("[*]")) {
|
|
||||||
return diagram.getStart();
|
|
||||||
}
|
|
||||||
return getFoo1(diagram, codeString);
|
|
||||||
}
|
|
||||||
|
|
||||||
private IEntity getEntityEnd(StateDiagram diagram, final String codeString) {
|
|
||||||
if (codeString.startsWith("[*]")) {
|
|
||||||
return diagram.getEnd();
|
|
||||||
}
|
|
||||||
return getFoo1(diagram, codeString);
|
|
||||||
}
|
|
||||||
|
|
||||||
private IEntity getFoo1(StateDiagram diagram, final String codeString) {
|
|
||||||
if (codeString.equalsIgnoreCase("[H]")) {
|
|
||||||
return diagram.getHistorical();
|
|
||||||
}
|
|
||||||
if (codeString.endsWith("[H]")) {
|
|
||||||
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("=")) {
|
|
||||||
final String codeString1 = removeEquals(codeString);
|
|
||||||
final Ident ident1 = diagram.buildLeafIdent(codeString1);
|
|
||||||
final Code code1 = diagram.V1972() ? ident1 : diagram.buildCode(codeString1);
|
|
||||||
return diagram.getOrCreateLeaf(ident1, code1, LeafType.SYNCHRO_BAR, null);
|
|
||||||
}
|
|
||||||
final Ident ident = diagram.buildLeafIdent(codeString);
|
|
||||||
final Code code = diagram.V1972() ? ident : diagram.buildCode(codeString);
|
|
||||||
if (diagram.checkConcurrentStateOk(ident, code) == false) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return diagram.getOrCreateLeaf(ident, code, null, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private String removeEquals(String code) {
|
|
||||||
while (code.startsWith("=")) {
|
|
||||||
code = code.substring(1);
|
|
||||||
}
|
|
||||||
while (code.endsWith("=")) {
|
|
||||||
code = code.substring(0, code.length() - 1);
|
|
||||||
}
|
|
||||||
return code;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,195 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* 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.statediagram.command;
|
||||||
|
|
||||||
|
import net.sourceforge.plantuml.Direction;
|
||||||
|
import net.sourceforge.plantuml.LineLocation;
|
||||||
|
import net.sourceforge.plantuml.StringUtils;
|
||||||
|
import net.sourceforge.plantuml.UmlDiagramType;
|
||||||
|
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.RegexLeaf;
|
||||||
|
import net.sourceforge.plantuml.command.regex.RegexResult;
|
||||||
|
import net.sourceforge.plantuml.cucadiagram.Code;
|
||||||
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
|
import net.sourceforge.plantuml.cucadiagram.IEntity;
|
||||||
|
import net.sourceforge.plantuml.cucadiagram.Ident;
|
||||||
|
import net.sourceforge.plantuml.cucadiagram.LeafType;
|
||||||
|
import net.sourceforge.plantuml.cucadiagram.Link;
|
||||||
|
import net.sourceforge.plantuml.cucadiagram.LinkDecor;
|
||||||
|
import net.sourceforge.plantuml.cucadiagram.LinkType;
|
||||||
|
import net.sourceforge.plantuml.cucadiagram.Stereotype;
|
||||||
|
import net.sourceforge.plantuml.graphic.color.ColorType;
|
||||||
|
import net.sourceforge.plantuml.statediagram.StateDiagram;
|
||||||
|
import net.sourceforge.plantuml.ugraphic.color.NoSuchColorException;
|
||||||
|
|
||||||
|
abstract class CommandLinkStateCommon extends SingleLineCommand2<StateDiagram> {
|
||||||
|
|
||||||
|
CommandLinkStateCommon(IRegex pattern) {
|
||||||
|
super(pattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static RegexLeaf getStatePattern(String name) {
|
||||||
|
return new RegexLeaf(name,
|
||||||
|
"([%pLN_.:]+|[%pLN_.:]+\\[H\\*?\\]|\\[\\*\\]|\\[H\\*?\\]|(?:==+)(?:[%pLN_.:]+)(?:==+))[%s]*(\\<\\<.*\\>\\>)?[%s]*(#\\w+)?");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected CommandExecutionResult executeArg(StateDiagram diagram, LineLocation location, RegexResult arg)
|
||||||
|
throws NoSuchColorException {
|
||||||
|
final String ent1 = arg.get("ENT1", 0);
|
||||||
|
final String ent2 = arg.get("ENT2", 0);
|
||||||
|
|
||||||
|
final IEntity cl1 = getEntityStart(diagram, ent1);
|
||||||
|
if (cl1 == null) {
|
||||||
|
return CommandExecutionResult
|
||||||
|
.error("The state " + ent1 + " has been created in a concurrent state : it cannot be used here.");
|
||||||
|
}
|
||||||
|
final IEntity cl2 = getEntityEnd(diagram, ent2);
|
||||||
|
if (cl2 == null) {
|
||||||
|
return CommandExecutionResult
|
||||||
|
.error("The state " + ent2 + " has been created in a concurrent state : it cannot be used here.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (arg.get("ENT1", 1) != null) {
|
||||||
|
cl1.setStereotype(Stereotype.build(arg.get("ENT1", 1)));
|
||||||
|
}
|
||||||
|
if (arg.get("ENT1", 2) != null) {
|
||||||
|
final String s = arg.get("ENT1", 2);
|
||||||
|
cl1.setSpecificColorTOBEREMOVED(ColorType.BACK,
|
||||||
|
diagram.getSkinParam().getIHtmlColorSet().getColor(diagram.getSkinParam().getThemeStyle(), s));
|
||||||
|
}
|
||||||
|
if (arg.get("ENT2", 1) != null) {
|
||||||
|
cl2.setStereotype(Stereotype.build(arg.get("ENT2", 1)));
|
||||||
|
}
|
||||||
|
if (arg.get("ENT2", 2) != null) {
|
||||||
|
final String s = arg.get("ENT2", 2);
|
||||||
|
cl2.setSpecificColorTOBEREMOVED(ColorType.BACK,
|
||||||
|
diagram.getSkinParam().getIHtmlColorSet().getColor(diagram.getSkinParam().getThemeStyle(), s));
|
||||||
|
}
|
||||||
|
|
||||||
|
String queue = arg.get("ARROW_BODY1", 0) + arg.get("ARROW_BODY2", 0);
|
||||||
|
final Direction dir = getDirection(arg);
|
||||||
|
|
||||||
|
if (dir == Direction.LEFT || dir == Direction.RIGHT) {
|
||||||
|
queue = "-";
|
||||||
|
}
|
||||||
|
|
||||||
|
final int lenght = queue.length();
|
||||||
|
|
||||||
|
final boolean crossStart = arg.get("ARROW_CROSS_START", 0) != null;
|
||||||
|
final boolean circleEnd = arg.get("ARROW_CIRCLE_END", 0) != null;
|
||||||
|
final LinkType linkType = new LinkType(circleEnd ? LinkDecor.ARROW_AND_CIRCLE : LinkDecor.ARROW,
|
||||||
|
crossStart ? LinkDecor.CIRCLE_CROSS : LinkDecor.NONE);
|
||||||
|
|
||||||
|
final Display label = Display.getWithNewlines(arg.get("LABEL", 0));
|
||||||
|
Link link = new Link(cl1, cl2, linkType, label, lenght, diagram.getSkinParam().getCurrentStyleBuilder());
|
||||||
|
if (dir == Direction.LEFT || dir == Direction.UP) {
|
||||||
|
link = link.getInv();
|
||||||
|
}
|
||||||
|
link.applyStyle(diagram.getSkinParam().getThemeStyle(), arg.getLazzy("ARROW_STYLE", 0));
|
||||||
|
link.setUmlDiagramType(UmlDiagramType.STATE);
|
||||||
|
diagram.addLink(link);
|
||||||
|
|
||||||
|
return CommandExecutionResult.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Direction getDirection(RegexResult arg) {
|
||||||
|
final String arrowDirection = arg.get("ARROW_DIRECTION", 0);
|
||||||
|
if (arrowDirection != null) {
|
||||||
|
return StringUtils.getQueueDirection(arrowDirection);
|
||||||
|
}
|
||||||
|
return getDefaultDirection();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Direction getDefaultDirection() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEntity getEntityStart(StateDiagram diagram, final String codeString) {
|
||||||
|
if (codeString.startsWith("[*]")) {
|
||||||
|
return diagram.getStart();
|
||||||
|
}
|
||||||
|
return getFoo1(diagram, codeString);
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEntity getEntityEnd(StateDiagram diagram, final String codeString) {
|
||||||
|
if (codeString.startsWith("[*]")) {
|
||||||
|
return diagram.getEnd();
|
||||||
|
}
|
||||||
|
return getFoo1(diagram, codeString);
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEntity getFoo1(StateDiagram diagram, final String codeString) {
|
||||||
|
if (codeString.equalsIgnoreCase("[H]")) {
|
||||||
|
return diagram.getHistorical();
|
||||||
|
}
|
||||||
|
if (codeString.endsWith("[H]")) {
|
||||||
|
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("=")) {
|
||||||
|
final String codeString1 = removeEquals(codeString);
|
||||||
|
final Ident ident1 = diagram.buildLeafIdent(codeString1);
|
||||||
|
final Code code1 = diagram.V1972() ? ident1 : diagram.buildCode(codeString1);
|
||||||
|
return diagram.getOrCreateLeaf(ident1, code1, LeafType.SYNCHRO_BAR, null);
|
||||||
|
}
|
||||||
|
final Ident ident = diagram.buildLeafIdent(codeString);
|
||||||
|
final Code code = diagram.V1972() ? ident : diagram.buildCode(codeString);
|
||||||
|
if (diagram.checkConcurrentStateOk(ident, code) == false) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return diagram.getOrCreateLeaf(ident, code, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String removeEquals(String code) {
|
||||||
|
while (code.startsWith("=")) {
|
||||||
|
code = code.substring(1);
|
||||||
|
}
|
||||||
|
while (code.endsWith("=")) {
|
||||||
|
code = code.substring(0, code.length() - 1);
|
||||||
|
}
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,81 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* 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.statediagram.command;
|
||||||
|
|
||||||
|
import net.sourceforge.plantuml.Direction;
|
||||||
|
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.descdiagram.command.CommandLinkElement;
|
||||||
|
|
||||||
|
public class CommandLinkStateReverse extends CommandLinkStateCommon {
|
||||||
|
|
||||||
|
public CommandLinkStateReverse() {
|
||||||
|
super(getRegex());
|
||||||
|
}
|
||||||
|
|
||||||
|
static RegexConcat getRegex() {
|
||||||
|
return RegexConcat.build(CommandLinkStateReverse.class.getName(), RegexLeaf.start(), //
|
||||||
|
getStatePattern("ENT2"), //
|
||||||
|
RegexLeaf.spaceZeroOrMore(), //
|
||||||
|
new RegexConcat(
|
||||||
|
//
|
||||||
|
new RegexLeaf("ARROW_CIRCLE_END", "(o[%s]+)?"), //
|
||||||
|
new RegexLeaf("\\<"), //
|
||||||
|
new RegexLeaf("ARROW_BODY2", "(-*)"), //
|
||||||
|
new RegexLeaf("ARROW_STYLE2", "(?:\\[(" + CommandLinkElement.LINE_STYLE + ")\\])?"), //
|
||||||
|
new RegexLeaf("ARROW_DIRECTION", "(left|right|up|down|le?|ri?|up?|do?)?"), //
|
||||||
|
new RegexLeaf("ARROW_STYLE1", "(?:\\[(" + CommandLinkElement.LINE_STYLE + ")\\])?"), //
|
||||||
|
new RegexLeaf("ARROW_BODY1", "(-+)"), //
|
||||||
|
new RegexLeaf("ARROW_CROSS_START", "(x)?")), //
|
||||||
|
RegexLeaf.spaceZeroOrMore(), //
|
||||||
|
getStatePattern("ENT1"), //
|
||||||
|
RegexLeaf.spaceZeroOrMore(), //
|
||||||
|
new RegexOptional( //
|
||||||
|
new RegexConcat( //
|
||||||
|
new RegexLeaf(":"), //
|
||||||
|
RegexLeaf.spaceZeroOrMore(), //
|
||||||
|
new RegexLeaf("LABEL", "(.+)") //
|
||||||
|
)), RegexLeaf.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Direction getDefaultDirection() {
|
||||||
|
return Direction.LEFT;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -43,6 +43,7 @@ import java.util.List;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.Url;
|
import net.sourceforge.plantuml.Url;
|
||||||
|
import net.sourceforge.plantuml.cucadiagram.Stereostyles;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Stereotype;
|
import net.sourceforge.plantuml.cucadiagram.Stereotype;
|
||||||
|
|
||||||
public class StyleSignature {
|
public class StyleSignature {
|
||||||
@ -153,7 +154,7 @@ public class StyleSignature {
|
|||||||
return new StyleSignature(result);
|
return new StyleSignature(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public StyleSignature withStereotype(Stereotype stereotype) {
|
public StyleSignature forStereotypeItself(Stereotype stereotype) {
|
||||||
final List<String> result = new ArrayList<>(names);
|
final List<String> result = new ArrayList<>(names);
|
||||||
if (stereotype != null) {
|
if (stereotype != null) {
|
||||||
for (String name : stereotype.getStyleNames()) {
|
for (String name : stereotype.getStyleNames()) {
|
||||||
@ -174,6 +175,16 @@ public class StyleSignature {
|
|||||||
return new StyleSignature(result);
|
return new StyleSignature(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public StyleSignature with(Stereostyles stereostyles) {
|
||||||
|
if (stereostyles.isEmpty())
|
||||||
|
return this;
|
||||||
|
final List<String> result = new ArrayList<>(names);
|
||||||
|
for (String name : stereostyles.getStyleNames()) {
|
||||||
|
result.add(clean(name));
|
||||||
|
}
|
||||||
|
return new StyleSignature(result);
|
||||||
|
}
|
||||||
|
|
||||||
private String clean(String name) {
|
private String clean(String name) {
|
||||||
return name.toLowerCase().replace("_", "");
|
return name.toLowerCase().replace("_", "");
|
||||||
}
|
}
|
||||||
|
@ -317,13 +317,26 @@ public class Cluster implements Moveable {
|
|||||||
}
|
}
|
||||||
HColor borderColor;
|
HColor borderColor;
|
||||||
Style style = null;
|
Style style = null;
|
||||||
|
final double rounded;
|
||||||
|
final double shadowing;
|
||||||
if (UseStyle.useBetaStyle()) {
|
if (UseStyle.useBetaStyle()) {
|
||||||
style = getDefaultStyleDefinition(umlDiagramType.getStyleName())
|
style = getDefaultStyleDefinition(umlDiagramType.getStyleName())
|
||||||
.getMergedStyle(skinParam.getCurrentStyleBuilder());
|
.getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||||
|
shadowing = style.value(PName.Shadowing).asDouble();
|
||||||
borderColor = style.value(PName.LineColor).asColor(skinParam2.getThemeStyle(),
|
borderColor = style.value(PName.LineColor).asColor(skinParam2.getThemeStyle(),
|
||||||
skinParam2.getIHtmlColorSet());
|
skinParam2.getIHtmlColorSet());
|
||||||
|
if (umlDiagramType == UmlDiagramType.STATE)
|
||||||
|
rounded = style.value(PName.RoundCorner).asDouble();
|
||||||
|
else
|
||||||
|
rounded = IEntityImage.CORNER;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
if (group.getUSymbol() == null) {
|
||||||
|
shadowing = skinParam2.shadowing2(group.getStereotype(), USymbol.PACKAGE.getSkinParameter()) ? 3 : 0;
|
||||||
|
} else {
|
||||||
|
shadowing = skinParam2.shadowing2(group.getStereotype(), group.getUSymbol().getSkinParameter()) ? 3 : 0;
|
||||||
|
}
|
||||||
|
rounded = IEntityImage.CORNER;
|
||||||
if (umlDiagramType == UmlDiagramType.STATE) {
|
if (umlDiagramType == UmlDiagramType.STATE) {
|
||||||
borderColor = getColor(ColorParam.stateBorder, skinParam, group.getStereotype());
|
borderColor = getColor(ColorParam.stateBorder, skinParam, group.getStereotype());
|
||||||
} else if (umlDiagramType == UmlDiagramType.ACTIVITY) {
|
} else if (umlDiagramType == UmlDiagramType.ACTIVITY) {
|
||||||
@ -353,7 +366,7 @@ public class Cluster implements Moveable {
|
|||||||
if (group.getColors(skinParam).getColor(ColorType.LINE) != null) {
|
if (group.getColors(skinParam).getColor(ColorType.LINE) != null) {
|
||||||
borderColor = group.getColors(skinParam).getColor(ColorType.LINE);
|
borderColor = group.getColors(skinParam).getColor(ColorType.LINE);
|
||||||
}
|
}
|
||||||
drawUState(ug, borderColor, skinParam2, strokeForState, umlDiagramType);
|
drawUState(ug, borderColor, skinParam2, strokeForState, umlDiagramType, rounded, shadowing);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PackageStyle packageStyle = group.getPackageStyle();
|
PackageStyle packageStyle = group.getPackageStyle();
|
||||||
@ -367,19 +380,10 @@ public class Cluster implements Moveable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final double shadowing;
|
|
||||||
final UStroke stroke;
|
final UStroke stroke;
|
||||||
if (UseStyle.useBetaStyle()) {
|
if (UseStyle.useBetaStyle()) {
|
||||||
shadowing = style.value(PName.Shadowing).asDouble();
|
|
||||||
stroke = style.getStroke();
|
stroke = style.getStroke();
|
||||||
} else {
|
} else {
|
||||||
if (group.getUSymbol() == null) {
|
|
||||||
shadowing = skinParam2.shadowing2(group.getStereotype(), USymbol.PACKAGE.getSkinParameter()) ? 3
|
|
||||||
: 0;
|
|
||||||
} else {
|
|
||||||
shadowing = skinParam2.shadowing2(group.getStereotype(), group.getUSymbol().getSkinParameter()) ? 3
|
|
||||||
: 0;
|
|
||||||
}
|
|
||||||
stroke = getStrokeInternal(group, skinParam2);
|
stroke = getStrokeInternal(group, skinParam2);
|
||||||
}
|
}
|
||||||
HColor backColor = getBackColor(umlDiagramType, style);
|
HColor backColor = getBackColor(umlDiagramType, style);
|
||||||
@ -463,7 +467,7 @@ public class Cluster implements Moveable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void drawUState(UGraphic ug, HColor borderColor, ISkinParam skinParam2, UStroke stroke,
|
private void drawUState(UGraphic ug, HColor borderColor, ISkinParam skinParam2, UStroke stroke,
|
||||||
UmlDiagramType umlDiagramType) {
|
UmlDiagramType umlDiagramType, double rounded, double shadowing) {
|
||||||
final Dimension2D total = new Dimension2DDouble(maxX - minX, maxY - minY);
|
final Dimension2D total = new Dimension2DDouble(maxX - minX, maxY - minY);
|
||||||
final double suppY;
|
final double suppY;
|
||||||
if (ztitle == null) {
|
if (ztitle == null) {
|
||||||
@ -492,8 +496,8 @@ public class Cluster implements Moveable {
|
|||||||
}
|
}
|
||||||
final RoundedContainer r = new RoundedContainer(total, suppY,
|
final RoundedContainer r = new RoundedContainer(total, suppY,
|
||||||
attributeHeight + (attributeHeight > 0 ? IEntityImage.MARGIN : 0), borderColor, stateBack, background,
|
attributeHeight + (attributeHeight > 0 ? IEntityImage.MARGIN : 0), borderColor, stateBack, background,
|
||||||
stroke);
|
stroke, rounded, shadowing);
|
||||||
r.drawU(ug.apply(new UTranslate(minX, minY)), skinParam2.shadowing(group.getStereotype()));
|
r.drawU(ug.apply(new UTranslate(minX, minY)));
|
||||||
|
|
||||||
if (ztitle != null) {
|
if (ztitle != null) {
|
||||||
ztitle.drawU(ug.apply(new UTranslate(xTitle, yTitle)));
|
ztitle.drawU(ug.apply(new UTranslate(xTitle, yTitle)));
|
||||||
|
@ -643,7 +643,7 @@ public final class GeneralImageBuilder {
|
|||||||
final TextBlock stereoAndTitle = TextBlockUtils.mergeTB(stereo, title, HorizontalAlignment.CENTER);
|
final TextBlock stereoAndTitle = TextBlockUtils.mergeTB(stereo, title, HorizontalAlignment.CENTER);
|
||||||
final Dimension2D dimLabel = stereoAndTitle.calculateDimension(stringBounder);
|
final Dimension2D dimLabel = stereoAndTitle.calculateDimension(stringBounder);
|
||||||
if (dimLabel.getWidth() > 0) {
|
if (dimLabel.getWidth() > 0) {
|
||||||
final Dimension2D dimAttribute = stateHeader((IEntity) g, getStyle(FontParam.STATE_ATTRIBUTE),
|
final Dimension2D dimAttribute = stateHeader((IEntity) g, getStyleState(FontParam.STATE_ATTRIBUTE),
|
||||||
dotData.getSkinParam()).calculateDimension(stringBounder);
|
dotData.getSkinParam()).calculateDimension(stringBounder);
|
||||||
final double attributeHeight = dimAttribute.getHeight();
|
final double attributeHeight = dimAttribute.getHeight();
|
||||||
final double attributeWidth = dimAttribute.getWidth();
|
final double attributeWidth = dimAttribute.getWidth();
|
||||||
@ -690,7 +690,7 @@ public final class GeneralImageBuilder {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Style getStyle(FontParam fontParam) {
|
private Style getStyleState(FontParam fontParam) {
|
||||||
return fontParam.getStyleDefinition(SName.stateDiagram)
|
return fontParam.getStyleDefinition(SName.stateDiagram)
|
||||||
.getMergedStyle(dotData.getSkinParam().getCurrentStyleBuilder());
|
.getMergedStyle(dotData.getSkinParam().getCurrentStyleBuilder());
|
||||||
}
|
}
|
||||||
@ -700,10 +700,19 @@ public final class GeneralImageBuilder {
|
|||||||
if (label == null) {
|
if (label == null) {
|
||||||
return TextBlockUtils.empty(0, 0);
|
return TextBlockUtils.empty(0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
final ISkinParam skinParam = dotData.getSkinParam();
|
final ISkinParam skinParam = dotData.getSkinParam();
|
||||||
final FontConfiguration fontConfiguration = g.getFontConfigurationForTitle(skinParam);
|
final FontConfiguration fontConfiguration;
|
||||||
return label.create(fontConfiguration, HorizontalAlignment.CENTER, skinParam);
|
if (UseStyle.useBetaStyle()) {
|
||||||
|
final SName sname = dotData.getUmlDiagramType().getStyleName();
|
||||||
|
final Style style = StyleSignature.of(SName.root, SName.element, sname, SName.title) //
|
||||||
|
.with(g.getStereotype()) //
|
||||||
|
.with(g.getStereostyles()) //
|
||||||
|
.getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||||
|
fontConfiguration = style.getFontConfiguration(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
|
||||||
|
} else
|
||||||
|
fontConfiguration = g.getFontConfigurationForTitle(skinParam);
|
||||||
|
final HorizontalAlignment alignment = HorizontalAlignment.CENTER;
|
||||||
|
return label.create(fontConfiguration, alignment, dotData.getSkinParam());
|
||||||
}
|
}
|
||||||
|
|
||||||
private TextBlock addLegend(TextBlock original, DisplayPositionned legend) {
|
private TextBlock addLegend(TextBlock original, DisplayPositionned legend) {
|
||||||
|
@ -123,12 +123,12 @@ public final class GroupPngMakerState {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Style getStyleHeader() {
|
private Style getStyleStateHeader() {
|
||||||
return StyleSignature.of(SName.root, SName.element, SName.stateDiagram, SName.state, SName.header)
|
return StyleSignature.of(SName.root, SName.element, SName.stateDiagram, SName.state, SName.header)
|
||||||
.with(group.getStereotype()).getMergedStyle(diagram.getSkinParam().getCurrentStyleBuilder());
|
.with(group.getStereotype()).getMergedStyle(diagram.getSkinParam().getCurrentStyleBuilder());
|
||||||
}
|
}
|
||||||
|
|
||||||
private Style getStyle() {
|
private Style getStyleState() {
|
||||||
return StyleSignature.of(SName.root, SName.element, SName.stateDiagram, SName.state).with(group.getStereotype())
|
return StyleSignature.of(SName.root, SName.element, SName.stateDiagram, SName.state).with(group.getStereotype())
|
||||||
.getMergedStyle(diagram.getSkinParam().getCurrentStyleBuilder());
|
.getMergedStyle(diagram.getSkinParam().getCurrentStyleBuilder());
|
||||||
}
|
}
|
||||||
@ -138,11 +138,20 @@ public final class GroupPngMakerState {
|
|||||||
final ISkinParam skinParam = diagram.getSkinParam();
|
final ISkinParam skinParam = diagram.getSkinParam();
|
||||||
|
|
||||||
final FontConfiguration fontConfiguration;
|
final FontConfiguration fontConfiguration;
|
||||||
if (UseStyle.useBetaStyle())
|
final double rounded;
|
||||||
fontConfiguration = getStyleHeader().getFontConfiguration(skinParam.getThemeStyle(),
|
double shadowing = 0;
|
||||||
|
|
||||||
|
if (UseStyle.useBetaStyle()) {
|
||||||
|
rounded = getStyleState().value(PName.RoundCorner).asDouble();
|
||||||
|
shadowing = getStyleState().value(PName.Shadowing).asDouble();
|
||||||
|
fontConfiguration = getStyleStateHeader().getFontConfiguration(skinParam.getThemeStyle(),
|
||||||
skinParam.getIHtmlColorSet());
|
skinParam.getIHtmlColorSet());
|
||||||
else
|
} else {
|
||||||
|
rounded = IEntityImage.CORNER;
|
||||||
fontConfiguration = new FontConfiguration(skinParam, FontParam.STATE, group.getStereotype());
|
fontConfiguration = new FontConfiguration(skinParam, FontParam.STATE, group.getStereotype());
|
||||||
|
if (skinParam.shadowing(group.getStereotype()))
|
||||||
|
shadowing = 3.0;
|
||||||
|
}
|
||||||
|
|
||||||
final TextBlock title = display.create(fontConfiguration, HorizontalAlignment.CENTER, diagram.getSkinParam());
|
final TextBlock title = display.create(fontConfiguration, HorizontalAlignment.CENTER, diagram.getSkinParam());
|
||||||
|
|
||||||
@ -171,7 +180,7 @@ public final class GroupPngMakerState {
|
|||||||
HColor borderColor = group.getColors(skinParam).getColor(ColorType.LINE);
|
HColor borderColor = group.getColors(skinParam).getColor(ColorType.LINE);
|
||||||
if (borderColor == null) {
|
if (borderColor == null) {
|
||||||
if (UseStyle.useBetaStyle())
|
if (UseStyle.useBetaStyle())
|
||||||
borderColor = getStyle().value(PName.LineColor).asColor(skinParam.getThemeStyle(),
|
borderColor = getStyleState().value(PName.LineColor).asColor(skinParam.getThemeStyle(),
|
||||||
skinParam.getIHtmlColorSet());
|
skinParam.getIHtmlColorSet());
|
||||||
else
|
else
|
||||||
borderColor = getColor(ColorParam.stateBorder, group.getStereotype());
|
borderColor = getColor(ColorParam.stateBorder, group.getStereotype());
|
||||||
@ -181,7 +190,9 @@ public final class GroupPngMakerState {
|
|||||||
final HColor backColor;
|
final HColor backColor;
|
||||||
if (tmp == null)
|
if (tmp == null)
|
||||||
if (UseStyle.useBetaStyle())
|
if (UseStyle.useBetaStyle())
|
||||||
backColor = getStyle().value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
|
backColor =
|
||||||
|
|
||||||
|
getStyleState().value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
|
||||||
skinParam.getIHtmlColorSet());
|
skinParam.getIHtmlColorSet());
|
||||||
else
|
else
|
||||||
backColor = getColor(ColorParam.stateBackground, stereo);
|
backColor = getColor(ColorParam.stateBackground, stereo);
|
||||||
@ -200,8 +211,8 @@ public final class GroupPngMakerState {
|
|||||||
if (stroke == null) {
|
if (stroke == null) {
|
||||||
stroke = new UStroke(1.5);
|
stroke = new UStroke(1.5);
|
||||||
}
|
}
|
||||||
return new InnerStateAutonom(image, title, attribute, borderColor, backColor,
|
return new InnerStateAutonom(image, title, attribute, borderColor, backColor, group.getUrl99(), withSymbol,
|
||||||
skinParam.shadowing(group.getStereotype()), group.getUrl99(), withSymbol, stroke);
|
stroke, rounded, shadowing);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,13 +55,14 @@ public final class InnerStateAutonom extends AbstractTextBlock implements IEntit
|
|||||||
private final TextBlock attribute;
|
private final TextBlock attribute;
|
||||||
private final HColor borderColor;
|
private final HColor borderColor;
|
||||||
private final HColor backColor;
|
private final HColor backColor;
|
||||||
private final boolean shadowing;
|
|
||||||
private final Url url;
|
private final Url url;
|
||||||
private final boolean withSymbol;
|
private final boolean withSymbol;
|
||||||
private final UStroke stroke;
|
private final UStroke stroke;
|
||||||
|
private final double rounded;
|
||||||
|
private final double shadowing;
|
||||||
|
|
||||||
public InnerStateAutonom(final IEntityImage im, final TextBlock title, TextBlock attribute, HColor borderColor,
|
public InnerStateAutonom(IEntityImage im, TextBlock title, TextBlock attribute, HColor borderColor,
|
||||||
HColor backColor, boolean shadowing, Url url, boolean withSymbol, UStroke stroke) {
|
HColor backColor, Url url, boolean withSymbol, UStroke stroke, double rounded, double shadowing) {
|
||||||
this.im = im;
|
this.im = im;
|
||||||
this.withSymbol = withSymbol;
|
this.withSymbol = withSymbol;
|
||||||
this.title = title;
|
this.title = title;
|
||||||
@ -71,6 +72,7 @@ public final class InnerStateAutonom extends AbstractTextBlock implements IEntit
|
|||||||
this.attribute = attribute;
|
this.attribute = attribute;
|
||||||
this.url = url;
|
this.url = url;
|
||||||
this.stroke = stroke;
|
this.stroke = stroke;
|
||||||
|
this.rounded = rounded;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void drawU(UGraphic ug) {
|
public void drawU(UGraphic ug) {
|
||||||
@ -81,13 +83,13 @@ public final class InnerStateAutonom extends AbstractTextBlock implements IEntit
|
|||||||
|
|
||||||
final double titreHeight = IEntityImage.MARGIN + text.getHeight() + IEntityImage.MARGIN_LINE;
|
final double titreHeight = IEntityImage.MARGIN + text.getHeight() + IEntityImage.MARGIN_LINE;
|
||||||
final RoundedContainer r = new RoundedContainer(total, titreHeight, attr.getHeight() + marginForFields,
|
final RoundedContainer r = new RoundedContainer(total, titreHeight, attr.getHeight() + marginForFields,
|
||||||
borderColor, backColor, im.getBackcolor(), stroke);
|
borderColor, backColor, im.getBackcolor(), stroke, rounded, shadowing);
|
||||||
|
|
||||||
if (url != null) {
|
if (url != null) {
|
||||||
ug.startUrl(url);
|
ug.startUrl(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
r.drawU(ug, shadowing);
|
r.drawU(ug);
|
||||||
title.drawU(ug.apply(new UTranslate((total.getWidth() - text.getWidth()) / 2, IEntityImage.MARGIN)));
|
title.drawU(ug.apply(new UTranslate((total.getWidth() - text.getWidth()) / 2, IEntityImage.MARGIN)));
|
||||||
attribute.drawU(ug.apply(
|
attribute.drawU(ug.apply(
|
||||||
new UTranslate(0 + IEntityImage.MARGIN, IEntityImage.MARGIN + text.getHeight() + IEntityImage.MARGIN)));
|
new UTranslate(0 + IEntityImage.MARGIN, IEntityImage.MARGIN + text.getHeight() + IEntityImage.MARGIN)));
|
||||||
|
@ -53,12 +53,15 @@ public final class RoundedContainer {
|
|||||||
private final HColor backColor;
|
private final HColor backColor;
|
||||||
private final HColor imgBackcolor;
|
private final HColor imgBackcolor;
|
||||||
private final UStroke stroke;
|
private final UStroke stroke;
|
||||||
|
private final double rounded;
|
||||||
|
private final double shadowing;
|
||||||
|
|
||||||
public RoundedContainer(Dimension2D dim, double titleHeight, double attributeHeight, HColor borderColor,
|
public RoundedContainer(Dimension2D dim, double titleHeight, double attributeHeight, HColor borderColor,
|
||||||
HColor backColor, HColor imgBackcolor, UStroke stroke) {
|
HColor backColor, HColor imgBackcolor, UStroke stroke, double rounded, double shadowing) {
|
||||||
if (dim.getWidth() == 0) {
|
if (dim.getWidth() == 0) {
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
}
|
}
|
||||||
|
this.rounded = rounded;
|
||||||
this.dim = dim;
|
this.dim = dim;
|
||||||
this.imgBackcolor = imgBackcolor;
|
this.imgBackcolor = imgBackcolor;
|
||||||
this.titleHeight = titleHeight;
|
this.titleHeight = titleHeight;
|
||||||
@ -66,15 +69,13 @@ public final class RoundedContainer {
|
|||||||
this.backColor = backColor;
|
this.backColor = backColor;
|
||||||
this.attributeHeight = attributeHeight;
|
this.attributeHeight = attributeHeight;
|
||||||
this.stroke = stroke;
|
this.stroke = stroke;
|
||||||
|
this.shadowing = shadowing;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void drawU(UGraphic ug, boolean shadowing) {
|
public void drawU(UGraphic ug) {
|
||||||
|
|
||||||
ug = ug.apply(backColor.bg()).apply(borderColor);
|
ug = ug.apply(backColor.bg()).apply(borderColor);
|
||||||
final URectangle rect = new URectangle(dim.getWidth(), dim.getHeight()).rounded(IEntityImage.CORNER);
|
final URectangle rect = new URectangle(dim.getWidth(), dim.getHeight()).rounded(rounded);
|
||||||
if (shadowing) {
|
rect.setDeltaShadow(shadowing);
|
||||||
rect.setDeltaShadow(3.0);
|
|
||||||
}
|
|
||||||
ug.apply(stroke).draw(rect);
|
ug.apply(stroke).draw(rect);
|
||||||
|
|
||||||
final double yLine = titleHeight + attributeHeight;
|
final double yLine = titleHeight + attributeHeight;
|
||||||
@ -84,9 +85,8 @@ public final class RoundedContainer {
|
|||||||
final double thickness = stroke.getThickness();
|
final double thickness = stroke.getThickness();
|
||||||
|
|
||||||
final URectangle inner = new URectangle(dim.getWidth() - 4 * thickness,
|
final URectangle inner = new URectangle(dim.getWidth() - 4 * thickness,
|
||||||
dim.getHeight() - titleHeight - 4 * thickness - attributeHeight).rounded(IEntityImage.CORNER);
|
dim.getHeight() - titleHeight - 4 * thickness - attributeHeight).rounded(rounded);
|
||||||
ug.apply(imgBackcolor).apply(new UTranslate(2 * thickness, yLine + 2 * thickness))
|
ug.apply(imgBackcolor).apply(new UTranslate(2 * thickness, yLine + 2 * thickness)).draw(inner);
|
||||||
.draw(inner);
|
|
||||||
|
|
||||||
if (titleHeight > 0) {
|
if (titleHeight > 0) {
|
||||||
ug.apply(stroke).apply(UTranslate.dy(yLine)).draw(ULine.hline(dim.getWidth()));
|
ug.apply(stroke).apply(UTranslate.dy(yLine)).draw(ULine.hline(dim.getWidth()));
|
||||||
|
@ -93,6 +93,9 @@ public class EntityImageClass extends AbstractEntityImage implements Stencil, Wi
|
|||||||
super(entity, entity.getColors(skinParam).mute(skinParam));
|
super(entity, entity.getColors(skinParam).mute(skinParam));
|
||||||
this.leafType = entity.getLeafType();
|
this.leafType = entity.getLeafType();
|
||||||
this.lineConfig = entity;
|
this.lineConfig = entity;
|
||||||
|
if (UseStyle.useBetaStyle())
|
||||||
|
this.roundCorner = getStyle().value(PName.RoundCorner).asDouble();
|
||||||
|
else
|
||||||
this.roundCorner = getSkinParam().getRoundCorner(CornerParam.DEFAULT, null);
|
this.roundCorner = getSkinParam().getRoundCorner(CornerParam.DEFAULT, null);
|
||||||
this.shield = version != null && version.useShield() && entity.hasNearDecoration() ? Margins.uniform(16)
|
this.shield = version != null && version.useShield() && entity.hasNearDecoration() ? Margins.uniform(16)
|
||||||
: Margins.NONE;
|
: Margins.NONE;
|
||||||
@ -101,7 +104,7 @@ public class EntityImageClass extends AbstractEntityImage implements Stencil, Wi
|
|||||||
this.body = entity.getBodier().getBody(FontParam.CLASS_ATTRIBUTE, getSkinParam(), showMethods, showFields,
|
this.body = entity.getBodier().getBody(FontParam.CLASS_ATTRIBUTE, getSkinParam(), showMethods, showFields,
|
||||||
entity.getStereotype(), getStyle());
|
entity.getStereotype(), getStyle());
|
||||||
|
|
||||||
header = new EntityImageClassHeader(entity, getSkinParam(), portionShower);
|
this.header = new EntityImageClassHeader(entity, getSkinParam(), portionShower);
|
||||||
this.url = entity.getUrl99();
|
this.url = entity.getUrl99();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,8 +146,10 @@ public class EntityImageClass extends AbstractEntityImage implements Stencil, Wi
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Style getStyle() {
|
private Style getStyle() {
|
||||||
return StyleSignature.of(SName.root, SName.element, SName.classDiagram, SName.class_)
|
return StyleSignature.of(SName.root, SName.element, SName.classDiagram, SName.class_) //
|
||||||
.with(getEntity().getStereotype()).getMergedStyle(getSkinParam().getCurrentStyleBuilder());
|
.with(getEntity().getStereotype()) //
|
||||||
|
.with(getEntity().getStereostyles()) //
|
||||||
|
.getMergedStyle(getSkinParam().getCurrentStyleBuilder());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void drawInternal(UGraphic ug) {
|
private void drawInternal(UGraphic ug) {
|
||||||
|
@ -86,7 +86,9 @@ public class EntityImageClassHeader extends AbstractEntityImage {
|
|||||||
|
|
||||||
if (UseStyle.useBetaStyle()) {
|
if (UseStyle.useBetaStyle()) {
|
||||||
final Style style = StyleSignature
|
final Style style = StyleSignature
|
||||||
.of(SName.root, SName.element, SName.classDiagram, SName.class_, SName.header).with(stereotype)
|
.of(SName.root, SName.element, SName.classDiagram, SName.class_, SName.header) //
|
||||||
|
.with(stereotype) //
|
||||||
|
.with(entity.getStereostyles()) //
|
||||||
.getMergedStyle(skinParam.getCurrentStyleBuilder());
|
.getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||||
fontConfigurationName = new FontConfiguration(skinParam, style);
|
fontConfigurationName = new FontConfiguration(skinParam, style);
|
||||||
} else {
|
} else {
|
||||||
|
@ -146,7 +146,7 @@ public class EntityImageDescription extends AbstractEntityImage {
|
|||||||
symbol.getSkinParameter().getStyleName());
|
symbol.getSkinParameter().getStyleName());
|
||||||
style = tmp.with(stereotype).getMergedStyle(getSkinParam().getCurrentStyleBuilder());
|
style = tmp.with(stereotype).getMergedStyle(getSkinParam().getCurrentStyleBuilder());
|
||||||
style = style.eventuallyOverride(colors);
|
style = style.eventuallyOverride(colors);
|
||||||
final Style styleStereo = tmp.withStereotype(stereotype)
|
final Style styleStereo = tmp.forStereotypeItself(stereotype)
|
||||||
.getMergedStyle(getSkinParam().getCurrentStyleBuilder());
|
.getMergedStyle(getSkinParam().getCurrentStyleBuilder());
|
||||||
forecolor = style.value(PName.LineColor).asColor(getSkinParam().getThemeStyle(),
|
forecolor = style.value(PName.LineColor).asColor(getSkinParam().getThemeStyle(),
|
||||||
getSkinParam().getIHtmlColorSet());
|
getSkinParam().getIHtmlColorSet());
|
||||||
|
@ -83,7 +83,7 @@ public class EntityImageState extends EntityImageStateCommon {
|
|||||||
final FontConfiguration fontConfiguration;
|
final FontConfiguration fontConfiguration;
|
||||||
|
|
||||||
if (UseStyle.useBetaStyle())
|
if (UseStyle.useBetaStyle())
|
||||||
fontConfiguration = getStyleMember().getFontConfiguration(getSkinParam().getThemeStyle(),
|
fontConfiguration = getStyleState().getFontConfiguration(getSkinParam().getThemeStyle(),
|
||||||
getSkinParam().getIHtmlColorSet());
|
getSkinParam().getIHtmlColorSet());
|
||||||
else
|
else
|
||||||
fontConfiguration = new FontConfiguration(getSkinParam(), FontParam.STATE_ATTRIBUTE, stereotype);
|
fontConfiguration = new FontConfiguration(getSkinParam(), FontParam.STATE_ATTRIBUTE, stereotype);
|
||||||
|
@ -78,7 +78,7 @@ public abstract class EntityImageStateCommon extends AbstractEntityImage {
|
|||||||
final FontConfiguration fontConfiguration;
|
final FontConfiguration fontConfiguration;
|
||||||
|
|
||||||
if (UseStyle.useBetaStyle())
|
if (UseStyle.useBetaStyle())
|
||||||
fontConfiguration = getStyleHeader().getFontConfiguration(getSkinParam().getThemeStyle(),
|
fontConfiguration = getStyleStateHeader().getFontConfiguration(getSkinParam().getThemeStyle(),
|
||||||
getSkinParam().getIHtmlColorSet());
|
getSkinParam().getIHtmlColorSet());
|
||||||
else
|
else
|
||||||
fontConfiguration = new FontConfiguration(getSkinParam(), FontParam.STATE, stereotype);
|
fontConfiguration = new FontConfiguration(getSkinParam(), FontParam.STATE, stereotype);
|
||||||
@ -89,12 +89,12 @@ public abstract class EntityImageStateCommon extends AbstractEntityImage {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final protected Style getStyleHeader() {
|
private Style getStyleStateHeader() {
|
||||||
return StyleSignature.of(SName.root, SName.element, SName.stateDiagram, SName.state, SName.header)
|
return StyleSignature.of(SName.root, SName.element, SName.stateDiagram, SName.state, SName.header)
|
||||||
.with(getEntity().getStereotype()).getMergedStyle(getSkinParam().getCurrentStyleBuilder());
|
.with(getEntity().getStereotype()).getMergedStyle(getSkinParam().getCurrentStyleBuilder());
|
||||||
}
|
}
|
||||||
|
|
||||||
final protected Style getStyleMember() {
|
final protected Style getStyleState() {
|
||||||
return StyleSignature.of(SName.root, SName.element, SName.stateDiagram, SName.state)
|
return StyleSignature.of(SName.root, SName.element, SName.stateDiagram, SName.state)
|
||||||
.with(getEntity().getStereotype()).getMergedStyle(getSkinParam().getCurrentStyleBuilder());
|
.with(getEntity().getStereotype()).getMergedStyle(getSkinParam().getCurrentStyleBuilder());
|
||||||
}
|
}
|
||||||
@ -112,10 +112,19 @@ public abstract class EntityImageStateCommon extends AbstractEntityImage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final protected URectangle getShape(final Dimension2D dimTotal) {
|
final protected URectangle getShape(final Dimension2D dimTotal) {
|
||||||
final URectangle rect = new URectangle(dimTotal).rounded(CORNER);
|
double deltaShadow = 0;
|
||||||
if (getSkinParam().shadowing(getEntity().getStereotype())) {
|
final double corner;
|
||||||
rect.setDeltaShadow(4);
|
if (UseStyle.useBetaStyle()) {
|
||||||
|
corner = getStyleState().value(PName.RoundCorner).asDouble();
|
||||||
|
deltaShadow = getStyleState().value(PName.Shadowing).asDouble();
|
||||||
|
} else {
|
||||||
|
corner = CORNER;
|
||||||
|
if (getSkinParam().shadowing(getEntity().getStereotype()))
|
||||||
|
deltaShadow = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final URectangle rect = new URectangle(dimTotal).rounded(corner);
|
||||||
|
rect.setDeltaShadow(deltaShadow);
|
||||||
return rect;
|
return rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,7 +133,7 @@ public abstract class EntityImageStateCommon extends AbstractEntityImage {
|
|||||||
HColor classBorder = lineConfig.getColors(getSkinParam()).getColor(ColorType.LINE);
|
HColor classBorder = lineConfig.getColors(getSkinParam()).getColor(ColorType.LINE);
|
||||||
if (classBorder == null) {
|
if (classBorder == null) {
|
||||||
if (UseStyle.useBetaStyle())
|
if (UseStyle.useBetaStyle())
|
||||||
classBorder = getStyleMember().value(PName.LineColor).asColor(getSkinParam().getThemeStyle(),
|
classBorder = getStyleState().value(PName.LineColor).asColor(getSkinParam().getThemeStyle(),
|
||||||
getSkinParam().getIHtmlColorSet());
|
getSkinParam().getIHtmlColorSet());
|
||||||
else
|
else
|
||||||
classBorder = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBorder);
|
classBorder = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBorder);
|
||||||
@ -133,7 +142,7 @@ public abstract class EntityImageStateCommon extends AbstractEntityImage {
|
|||||||
HColor backcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.BACK);
|
HColor backcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.BACK);
|
||||||
if (backcolor == null) {
|
if (backcolor == null) {
|
||||||
if (UseStyle.useBetaStyle())
|
if (UseStyle.useBetaStyle())
|
||||||
backcolor = getStyleMember().value(PName.BackGroundColor).asColor(getSkinParam().getThemeStyle(),
|
backcolor = getStyleState().value(PName.BackGroundColor).asColor(getSkinParam().getThemeStyle(),
|
||||||
getSkinParam().getIHtmlColorSet());
|
getSkinParam().getIHtmlColorSet());
|
||||||
else
|
else
|
||||||
backcolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBackground);
|
backcolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBackground);
|
||||||
|
@ -80,7 +80,7 @@ public class Version {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static int beta() {
|
public static int beta() {
|
||||||
final int beta = 0;
|
final int beta = 3;
|
||||||
return beta;
|
return beta;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user