Compare commits

...

2 Commits

14 changed files with 64 additions and 21 deletions

View File

@ -1,4 +1,4 @@
# Warning, "version" should be the same in gradle.properties and Version.java # Warning, "version" should be the same in gradle.properties and Version.java
# Any idea anyone how to magically synchronize those :-) ? # Any idea anyone how to magically synchronize those :-) ?
version = 1.2024.4beta5 version = 1.2024.4beta6
org.gradle.workers.max = 3 org.gradle.workers.max = 3

View File

@ -127,10 +127,16 @@ public class CommandCreateClassMultilines extends CommandMultilines2<ClassDiagra
new RegexLeaf("LINECOLOR", "(?:\\[(dotted|dashed|bold)\\])?(\\w+)?"))), // new RegexLeaf("LINECOLOR", "(?:\\[(dotted|dashed|bold)\\])?(\\w+)?"))), //
new RegexOptional(new RegexConcat(RegexLeaf.spaceOneOrMore(), new RegexOptional(new RegexConcat(RegexLeaf.spaceOneOrMore(),
new RegexLeaf("EXTENDS", new RegexLeaf("EXTENDS",
"(extends)[%s]+(" + CommandCreateClassMultilines.CODES + "|[%g]([^%g]+)[%g])"))), // "(extends)[%s]+(" + CommandCreateClassMultilines.CODES + "|[%g]([^%g]+)[%g])"),
new RegexOptional(new RegexConcat(RegexLeaf.spaceZeroOrMore(),
new RegexLeaf("\\<(" + GenericRegexProducer.PATTERN + ")\\>"))) //
)), //
new RegexOptional(new RegexConcat(RegexLeaf.spaceOneOrMore(), new RegexOptional(new RegexConcat(RegexLeaf.spaceOneOrMore(),
new RegexLeaf("IMPLEMENTS", new RegexLeaf("IMPLEMENTS",
"(implements)[%s]+(" + CommandCreateClassMultilines.CODES + "|[%g]([^%g]+)[%g])"))), // "(implements)[%s]+(" + CommandCreateClassMultilines.CODES + "|[%g]([^%g]+)[%g])"),
new RegexOptional(new RegexConcat(RegexLeaf.spaceZeroOrMore(),
new RegexLeaf("\\<(" + GenericRegexProducer.PATTERN + ")\\>"))) //
)), //
RegexLeaf.spaceZeroOrMore(), // RegexLeaf.spaceZeroOrMore(), //
new RegexLeaf("\\{"), // new RegexLeaf("\\{"), //
RegexLeaf.spaceZeroOrMore(), // RegexLeaf.spaceZeroOrMore(), //

View File

@ -53,13 +53,13 @@ public class CommandMindMapDirection extends SingleLineCommand2<MindMapDiagram>
static IRegex getRegexConcat() { static IRegex getRegexConcat() {
return RegexConcat.build(CommandMindMapDirection.class.getName(), RegexLeaf.start(), // return RegexConcat.build(CommandMindMapDirection.class.getName(), RegexLeaf.start(), //
new RegexLeaf("[^*]*"), // new RegexLeaf("[^*#]*"), //
new RegexLeaf("\\b"), // new RegexLeaf("\\b"), //
new RegexLeaf("DIRECTION", "(left|right|top|bottom)"), // new RegexLeaf("DIRECTION", "(left|right|top|bottom)"), //
new RegexLeaf("\\b"), // new RegexLeaf("\\b"), //
new RegexLeaf("[^*]*"), // new RegexLeaf("[^*#]*"), //
new RegexLeaf("(side|direction)"), // new RegexLeaf("(side|direction)"), //
new RegexLeaf("[^*]*"), // new RegexLeaf("[^*#]*"), //
RegexLeaf.end()); RegexLeaf.end());
} }

View File

@ -55,7 +55,7 @@ public class CommandMindMapOrgmode extends SingleLineCommand2<MindMapDiagram> {
static IRegex getRegexConcat() { static IRegex getRegexConcat() {
return RegexConcat.build(CommandMindMapOrgmode.class.getName(), RegexLeaf.start(), // return RegexConcat.build(CommandMindMapOrgmode.class.getName(), RegexLeaf.start(), //
new RegexLeaf("TYPE", "([ \t]*\\*+)"), // new RegexLeaf("TYPE", "([ \t]*[*#]+)"), //
new RegexOptional(new RegexLeaf("BACKCOLOR", "\\[(#\\w+)\\]")), // new RegexOptional(new RegexLeaf("BACKCOLOR", "\\[(#\\w+)\\]")), //
new RegexLeaf("SHAPE", "(_)?"), // new RegexLeaf("SHAPE", "(_)?"), //
RegexLeaf.spaceOneOrMore(), // RegexLeaf.spaceOneOrMore(), //

View File

@ -60,7 +60,7 @@ public class CommandMindMapOrgmodeMultiline extends CommandMultilines2<MindMapDi
static IRegex getRegexConcat() { static IRegex getRegexConcat() {
return RegexConcat.build(CommandMindMapOrgmodeMultiline.class.getName(), RegexLeaf.start(), // return RegexConcat.build(CommandMindMapOrgmodeMultiline.class.getName(), RegexLeaf.start(), //
new RegexLeaf("TYPE", "(\\*+)"), // new RegexLeaf("TYPE", "([*#]+)"), //
new RegexOptional(new RegexLeaf("BACKCOLOR", "\\[(#\\w+)\\]")), // new RegexOptional(new RegexLeaf("BACKCOLOR", "\\[(#\\w+)\\]")), //
new RegexLeaf("SHAPE", "(_)?"), // new RegexLeaf("SHAPE", "(_)?"), //
new RegexLeaf(":"), // new RegexLeaf(":"), //

View File

@ -62,8 +62,11 @@ public abstract class Player implements TimeProjected {
private final Display title; private final Display title;
protected int suggestedHeight; protected int suggestedHeight;
protected final Stereotype stereotype; protected final Stereotype stereotype;
private final HColor generalBackgroundColor;
public Player(String title, ISkinParam skinParam, TimingRuler ruler, boolean compact, Stereotype stereotype) { public Player(String title, ISkinParam skinParam, TimingRuler ruler, boolean compact, Stereotype stereotype,
HColor generalBackgroundColor) {
this.generalBackgroundColor = generalBackgroundColor;
this.stereotype = stereotype; this.stereotype = stereotype;
this.skinParam = skinParam; this.skinParam = skinParam;
this.compact = compact; this.compact = compact;
@ -75,6 +78,10 @@ public abstract class Player implements TimeProjected {
return compact; return compact;
} }
public HColor getGeneralBackgroundColor() {
return generalBackgroundColor;
}
protected abstract StyleSignature getStyleSignature(); protected abstract StyleSignature getStyleSignature();
final protected Style getStyle() { final protected Style getStyle() {

View File

@ -76,7 +76,7 @@ public class PlayerAnalog extends Player {
private Integer ticksEvery; private Integer ticksEvery;
public PlayerAnalog(String code, ISkinParam skinParam, TimingRuler ruler, boolean compact, Stereotype stereotype) { public PlayerAnalog(String code, ISkinParam skinParam, TimingRuler ruler, boolean compact, Stereotype stereotype) {
super(code, skinParam, ruler, compact, stereotype); super(code, skinParam, ruler, compact, stereotype, null);
this.suggestedHeight = 100; this.suggestedHeight = 100;
} }

View File

@ -76,7 +76,7 @@ public class PlayerBinary extends Player {
private final List<TimingNote> notes = new ArrayList<>(); private final List<TimingNote> notes = new ArrayList<>();
public PlayerBinary(String code, ISkinParam skinParam, TimingRuler ruler, boolean compact, Stereotype stereotype) { public PlayerBinary(String code, ISkinParam skinParam, TimingRuler ruler, boolean compact, Stereotype stereotype) {
super(code, skinParam, ruler, compact, stereotype); super(code, skinParam, ruler, compact, stereotype, null);
this.suggestedHeight = 30; this.suggestedHeight = 30;
} }

View File

@ -65,7 +65,7 @@ public class PlayerClock extends Player {
public PlayerClock(String title, ISkinParam skinParam, TimingRuler ruler, int period, int pulse, int offset, public PlayerClock(String title, ISkinParam skinParam, TimingRuler ruler, int period, int pulse, int offset,
boolean compact) { boolean compact) {
super(title, skinParam, ruler, compact, null); super(title, skinParam, ruler, compact, null, null);
this.displayTitle = title.length() > 0; this.displayTitle = title.length() > 0;
this.period = period; this.period = period;
this.pulse = pulse; this.pulse = pulse;

View File

@ -43,6 +43,7 @@ import java.util.TreeSet;
import net.sourceforge.plantuml.klimt.UTranslate; import net.sourceforge.plantuml.klimt.UTranslate;
import net.sourceforge.plantuml.klimt.color.Colors; import net.sourceforge.plantuml.klimt.color.Colors;
import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.creole.Display; import net.sourceforge.plantuml.klimt.creole.Display;
import net.sourceforge.plantuml.klimt.drawing.UGraphic; import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder; import net.sourceforge.plantuml.klimt.font.StringBounder;
@ -50,6 +51,7 @@ import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock; import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlock; import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.shape.UDrawable; import net.sourceforge.plantuml.klimt.shape.UDrawable;
import net.sourceforge.plantuml.klimt.shape.URectangle;
import net.sourceforge.plantuml.skin.ArrowConfiguration; import net.sourceforge.plantuml.skin.ArrowConfiguration;
import net.sourceforge.plantuml.stereo.Stereotype; import net.sourceforge.plantuml.stereo.Stereotype;
import net.sourceforge.plantuml.style.ISkinParam; import net.sourceforge.plantuml.style.ISkinParam;
@ -77,8 +79,8 @@ public final class PlayerRobustConcise extends Player {
private Colors initialColors; private Colors initialColors;
public PlayerRobustConcise(TimingStyle type, String full, ISkinParam skinParam, TimingRuler ruler, boolean compact, public PlayerRobustConcise(TimingStyle type, String full, ISkinParam skinParam, TimingRuler ruler, boolean compact,
Stereotype stereotype) { Stereotype stereotype, HColor generalBackgroundColor) {
super(full, skinParam, ruler, compact, stereotype); super(full, skinParam, ruler, compact, stereotype, generalBackgroundColor);
this.type = type; this.type = type;
this.suggestedHeight = 0; this.suggestedHeight = 0;
} }

View File

@ -55,6 +55,7 @@ import net.sourceforge.plantuml.klimt.UStroke;
import net.sourceforge.plantuml.klimt.UTranslate; import net.sourceforge.plantuml.klimt.UTranslate;
import net.sourceforge.plantuml.klimt.color.Colors; import net.sourceforge.plantuml.klimt.color.Colors;
import net.sourceforge.plantuml.klimt.color.HColor; import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.color.HColors;
import net.sourceforge.plantuml.klimt.creole.Display; import net.sourceforge.plantuml.klimt.creole.Display;
import net.sourceforge.plantuml.klimt.drawing.UGraphic; import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder; import net.sourceforge.plantuml.klimt.font.StringBounder;
@ -62,6 +63,7 @@ import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock; import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlock; import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.shape.ULine; import net.sourceforge.plantuml.klimt.shape.ULine;
import net.sourceforge.plantuml.klimt.shape.URectangle;
import net.sourceforge.plantuml.skin.UmlDiagramType; import net.sourceforge.plantuml.skin.UmlDiagramType;
import net.sourceforge.plantuml.stereo.Stereotype; import net.sourceforge.plantuml.stereo.Stereotype;
import net.sourceforge.plantuml.style.PName; import net.sourceforge.plantuml.style.PName;
@ -133,6 +135,15 @@ public class TimingDiagram extends UmlDiagram implements Clocks {
ruler.ensureNotEmpty(); ruler.ensureNotEmpty();
final StringBounder stringBounder = ug.getStringBounder(); final StringBounder stringBounder = ug.getStringBounder();
final double part1MaxWidth = getPart1MaxWidth(stringBounder); final double part1MaxWidth = getPart1MaxWidth(stringBounder);
for (Player player : players.values()) {
final UGraphic ugPlayer = ug.apply(getUTranslateForPlayer(player, stringBounder));
final HColor generalBackgroundColor = player.getGeneralBackgroundColor();
if (generalBackgroundColor != null)
ugPlayer.apply(generalBackgroundColor).apply(generalBackgroundColor.bg())
.draw(URectangle.build(getWidthTotal(stringBounder), player.getFullHeight(stringBounder)));
}
final UTranslate widthPart1 = UTranslate.dx(part1MaxWidth); final UTranslate widthPart1 = UTranslate.dx(part1MaxWidth);
if (compactByDefault == false) if (compactByDefault == false)
drawBorder(ug); drawBorder(ug);
@ -146,6 +157,7 @@ public class TimingDiagram extends UmlDiagram implements Clocks {
for (Player player : players.values()) { for (Player player : players.values()) {
final UGraphic ugPlayer = ug.apply(getUTranslateForPlayer(player, stringBounder)); final UGraphic ugPlayer = ug.apply(getUTranslateForPlayer(player, stringBounder));
final double caption = getHeightForCaptions(stringBounder); final double caption = getHeightForCaptions(stringBounder);
if (first) { if (first) {
if (player.isCompact() == false) if (player.isCompact() == false)
drawHorizontalSeparator(ugPlayer); drawHorizontalSeparator(ugPlayer);
@ -279,9 +291,9 @@ public class TimingDiagram extends UmlDiagram implements Clocks {
} }
public CommandExecutionResult createRobustConcise(String code, String full, TimingStyle type, boolean compact, public CommandExecutionResult createRobustConcise(String code, String full, TimingStyle type, boolean compact,
Stereotype stereotype) { Stereotype stereotype, HColor backColor) {
final Player player = new PlayerRobustConcise(type, full, getSkinParam(), ruler, compactByDefault || compact, final Player player = new PlayerRobustConcise(type, full, getSkinParam(), ruler, compactByDefault || compact,
stereotype); stereotype, backColor);
players.put(code, player); players.put(code, player);
lastPlayer = player; lastPlayer = player;
return CommandExecutionResult.ok(); return CommandExecutionResult.ok();

View File

@ -59,8 +59,9 @@ public class CommandDefineStateShort extends SingleLineCommand2<TimingDiagram> {
RegexLeaf.spaceOneOrMore(), // RegexLeaf.spaceOneOrMore(), //
new RegexLeaf("has"), // new RegexLeaf("has"), //
RegexLeaf.spaceOneOrMore(), // RegexLeaf.spaceOneOrMore(), //
new RegexLeaf("STATE", "([%pLN_.@]+)"), // new RegexLeaf("STATE", "([-%pLN_.@]+)"), //
new RegexLeaf("STATES", "((,([%pLN_.@]+))*)"), RegexLeaf.end()); new RegexLeaf("STATES", "((,([-%pLN_.@]+))*)"), //
RegexLeaf.end());
} }
@Override @Override

View File

@ -37,10 +37,15 @@ package net.sourceforge.plantuml.timingdiagram.command;
import net.sourceforge.plantuml.command.CommandExecutionResult; import net.sourceforge.plantuml.command.CommandExecutionResult;
import net.sourceforge.plantuml.command.SingleLineCommand2; import net.sourceforge.plantuml.command.SingleLineCommand2;
import net.sourceforge.plantuml.klimt.color.ColorParser;
import net.sourceforge.plantuml.klimt.color.ColorType;
import net.sourceforge.plantuml.klimt.color.Colors;
import net.sourceforge.plantuml.klimt.color.NoSuchColorException;
import net.sourceforge.plantuml.regex.IRegex; import net.sourceforge.plantuml.regex.IRegex;
import net.sourceforge.plantuml.regex.RegexConcat; import net.sourceforge.plantuml.regex.RegexConcat;
import net.sourceforge.plantuml.regex.RegexLeaf; import net.sourceforge.plantuml.regex.RegexLeaf;
import net.sourceforge.plantuml.regex.RegexOptional; import net.sourceforge.plantuml.regex.RegexOptional;
import net.sourceforge.plantuml.regex.RegexOr;
import net.sourceforge.plantuml.regex.RegexResult; import net.sourceforge.plantuml.regex.RegexResult;
import net.sourceforge.plantuml.stereo.Stereotype; import net.sourceforge.plantuml.stereo.Stereotype;
import net.sourceforge.plantuml.stereo.StereotypePattern; import net.sourceforge.plantuml.stereo.StereotypePattern;
@ -70,11 +75,18 @@ public class CommandRobustConcise extends SingleLineCommand2<TimingDiagram> {
RegexLeaf.spaceOneOrMore())), // RegexLeaf.spaceOneOrMore())), //
new RegexLeaf("CODE", "([%pLN_.@]+)"), // new RegexLeaf("CODE", "([%pLN_.@]+)"), //
StereotypePattern.optional("STEREOTYPE2"), // StereotypePattern.optional("STEREOTYPE2"), //
RegexLeaf.spaceZeroOrMore(), //
new RegexOr(color().getRegex()), //
RegexLeaf.end()); RegexLeaf.end());
} }
private static ColorParser color() {
return ColorParser.simpleColor(ColorType.BACK);
}
@Override @Override
final protected CommandExecutionResult executeArg(TimingDiagram diagram, LineLocation location, RegexResult arg) { final protected CommandExecutionResult executeArg(TimingDiagram diagram, LineLocation location, RegexResult arg)
throws NoSuchColorException {
final String compact = arg.get("COMPACT", 0); final String compact = arg.get("COMPACT", 0);
final String code = arg.get("CODE", 0); final String code = arg.get("CODE", 0);
String full = arg.get("FULL", 0); String full = arg.get("FULL", 0);
@ -88,7 +100,10 @@ public class CommandRobustConcise extends SingleLineCommand2<TimingDiagram> {
stereotype = Stereotype.build(arg.get("STEREOTYPE2", 0)); stereotype = Stereotype.build(arg.get("STEREOTYPE2", 0));
final TimingStyle type = TimingStyle.valueOf(arg.get("TYPE", 0).toUpperCase()); final TimingStyle type = TimingStyle.valueOf(arg.get("TYPE", 0).toUpperCase());
return diagram.createRobustConcise(code, full, type, compact != null, stereotype); final Colors colors = color().getColor(arg, diagram.getSkinParam().getIHtmlColorSet());
return diagram.createRobustConcise(code, full, type, compact != null, stereotype,
colors.getColor(ColorType.BACK));
} }
} }

View File

@ -46,7 +46,7 @@ public class Version {
// Warning, "version" should be the same in gradle.properties and Version.java // Warning, "version" should be the same in gradle.properties and Version.java
// Any idea anyone how to magically synchronize those :-) ? // Any idea anyone how to magically synchronize those :-) ?
private static final String version = "1.2024.4beta5"; private static final String version = "1.2024.4beta6";
public static String versionString() { public static String versionString() {
return version; return version;