mirror of
https://github.com/octoleo/plantuml.git
synced 2024-11-05 21:17:52 +00:00
wip on prefers-color-scheme:dark
This commit is contained in:
parent
ed2535bd75
commit
9d611cf988
@ -71,6 +71,7 @@ import net.sourceforge.plantuml.error.PSystemErrorUtils;
|
|||||||
import net.sourceforge.plantuml.flowdiagram.FlowDiagramFactory;
|
import net.sourceforge.plantuml.flowdiagram.FlowDiagramFactory;
|
||||||
import net.sourceforge.plantuml.font.PSystemListFontsFactory;
|
import net.sourceforge.plantuml.font.PSystemListFontsFactory;
|
||||||
import net.sourceforge.plantuml.gitlog.GitDiagramFactory;
|
import net.sourceforge.plantuml.gitlog.GitDiagramFactory;
|
||||||
|
import net.sourceforge.plantuml.hcl.HclDiagramFactory;
|
||||||
import net.sourceforge.plantuml.help.HelpFactory;
|
import net.sourceforge.plantuml.help.HelpFactory;
|
||||||
import net.sourceforge.plantuml.jcckit.PSystemJcckitFactory;
|
import net.sourceforge.plantuml.jcckit.PSystemJcckitFactory;
|
||||||
import net.sourceforge.plantuml.jsondiagram.JsonDiagramFactory;
|
import net.sourceforge.plantuml.jsondiagram.JsonDiagramFactory;
|
||||||
@ -223,6 +224,7 @@ public class PSystemBuilder {
|
|||||||
factories.add(new GitDiagramFactory());
|
factories.add(new GitDiagramFactory());
|
||||||
factories.add(new BoardDiagramFactory());
|
factories.add(new BoardDiagramFactory());
|
||||||
factories.add(new YamlDiagramFactory());
|
factories.add(new YamlDiagramFactory());
|
||||||
|
factories.add(new HclDiagramFactory());
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isOk(Diagram ps) {
|
private boolean isOk(Diagram ps) {
|
||||||
|
@ -123,6 +123,9 @@ public class SkinParam implements ISkinParam {
|
|||||||
if (type == UmlDiagramType.YAML) {
|
if (type == UmlDiagramType.YAML) {
|
||||||
UseStyle.setBetaStyle(true);
|
UseStyle.setBetaStyle(true);
|
||||||
}
|
}
|
||||||
|
if (type == UmlDiagramType.HCL) {
|
||||||
|
UseStyle.setBetaStyle(true);
|
||||||
|
}
|
||||||
if (type == UmlDiagramType.NWDIAG) {
|
if (type == UmlDiagramType.NWDIAG) {
|
||||||
UseStyle.setBetaStyle(true);
|
UseStyle.setBetaStyle(true);
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@ import net.sourceforge.plantuml.style.SName;
|
|||||||
|
|
||||||
public enum UmlDiagramType {
|
public enum UmlDiagramType {
|
||||||
SEQUENCE, STATE, CLASS, OBJECT, ACTIVITY, DESCRIPTION, COMPOSITE, FLOW, TIMING, BPM, NWDIAG, MINDMAP, WBS, WIRE,
|
SEQUENCE, STATE, CLASS, OBJECT, ACTIVITY, DESCRIPTION, COMPOSITE, FLOW, TIMING, BPM, NWDIAG, MINDMAP, WBS, WIRE,
|
||||||
HELP, GANTT, SALT, JSON, GIT, BOARD, YAML;
|
HELP, GANTT, SALT, JSON, GIT, BOARD, YAML, HCL;
|
||||||
|
|
||||||
public SName getStyleName() {
|
public SName getStyleName() {
|
||||||
if (this == SEQUENCE) {
|
if (this == SEQUENCE) {
|
||||||
@ -78,6 +78,9 @@ public enum UmlDiagramType {
|
|||||||
if (this == YAML) {
|
if (this == YAML) {
|
||||||
return SName.yamlDiagram;
|
return SName.yamlDiagram;
|
||||||
}
|
}
|
||||||
|
if (this == HCL) {
|
||||||
|
return SName.yamlDiagram;
|
||||||
|
}
|
||||||
if (this == JSON) {
|
if (this == JSON) {
|
||||||
return SName.jsonDiagram;
|
return SName.jsonDiagram;
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,7 @@ import net.sourceforge.plantuml.command.Command;
|
|||||||
import net.sourceforge.plantuml.command.CommandFootboxIgnored;
|
import net.sourceforge.plantuml.command.CommandFootboxIgnored;
|
||||||
import net.sourceforge.plantuml.command.CommandRankDir;
|
import net.sourceforge.plantuml.command.CommandRankDir;
|
||||||
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
||||||
|
import net.sourceforge.plantuml.command.CommonCommands;
|
||||||
import net.sourceforge.plantuml.command.note.CommandFactoryNoteActivity;
|
import net.sourceforge.plantuml.command.note.CommandFactoryNoteActivity;
|
||||||
import net.sourceforge.plantuml.command.note.CommandFactoryNoteOnLink;
|
import net.sourceforge.plantuml.command.note.CommandFactoryNoteOnLink;
|
||||||
import net.sourceforge.plantuml.core.UmlSource;
|
import net.sourceforge.plantuml.core.UmlSource;
|
||||||
@ -66,7 +67,7 @@ public class ActivityDiagramFactory extends PSystemCommandFactory {
|
|||||||
protected List<Command> createCommands() {
|
protected List<Command> createCommands() {
|
||||||
final List<Command> cmds = new ArrayList<>();
|
final List<Command> cmds = new ArrayList<>();
|
||||||
cmds.add(new CommandFootboxIgnored());
|
cmds.add(new CommandFootboxIgnored());
|
||||||
addCommonCommands1(cmds);
|
CommonCommands.addCommonCommands1(cmds);
|
||||||
cmds.add(new CommandRankDir());
|
cmds.add(new CommandRankDir());
|
||||||
|
|
||||||
cmds.add(new CommandPartition());
|
cmds.add(new CommandPartition());
|
||||||
|
@ -88,6 +88,7 @@ import net.sourceforge.plantuml.command.Command;
|
|||||||
import net.sourceforge.plantuml.command.CommandDecoratorMultine;
|
import net.sourceforge.plantuml.command.CommandDecoratorMultine;
|
||||||
import net.sourceforge.plantuml.command.CommandFootboxIgnored;
|
import net.sourceforge.plantuml.command.CommandFootboxIgnored;
|
||||||
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
||||||
|
import net.sourceforge.plantuml.command.CommonCommands;
|
||||||
import net.sourceforge.plantuml.core.UmlSource;
|
import net.sourceforge.plantuml.core.UmlSource;
|
||||||
|
|
||||||
public class ActivityDiagramFactory3 extends PSystemCommandFactory {
|
public class ActivityDiagramFactory3 extends PSystemCommandFactory {
|
||||||
@ -98,7 +99,7 @@ public class ActivityDiagramFactory3 extends PSystemCommandFactory {
|
|||||||
final List<Command> cmds = new ArrayList<>();
|
final List<Command> cmds = new ArrayList<>();
|
||||||
cmds.add(new CommandFootboxIgnored());
|
cmds.add(new CommandFootboxIgnored());
|
||||||
|
|
||||||
addCommonCommands1(cmds);
|
CommonCommands.addCommonCommands1(cmds);
|
||||||
cmds.add(new CommandSwimlane());
|
cmds.add(new CommandSwimlane());
|
||||||
cmds.add(new CommandSwimlane2());
|
cmds.add(new CommandSwimlane2());
|
||||||
cmds.add(new CommandPartition3());
|
cmds.add(new CommandPartition3());
|
||||||
@ -129,11 +130,11 @@ public class ActivityDiagramFactory3 extends PSystemCommandFactory {
|
|||||||
cmds.add(new CommandBackwardLong3());
|
cmds.add(new CommandBackwardLong3());
|
||||||
cmds.add(new CommandWhile3());
|
cmds.add(new CommandWhile3());
|
||||||
cmds.add(new CommandWhileEnd3());
|
cmds.add(new CommandWhileEnd3());
|
||||||
|
|
||||||
cmds.add(new CommandFork3());
|
cmds.add(new CommandFork3());
|
||||||
cmds.add(new CommandForkAgain3());
|
cmds.add(new CommandForkAgain3());
|
||||||
cmds.add(new CommandForkEnd3());
|
cmds.add(new CommandForkEnd3());
|
||||||
|
|
||||||
cmds.add(new CommandSplit3());
|
cmds.add(new CommandSplit3());
|
||||||
cmds.add(new CommandSplitAgain3());
|
cmds.add(new CommandSplitAgain3());
|
||||||
cmds.add(new CommandSplitEnd3());
|
cmds.add(new CommandSplitEnd3());
|
||||||
|
@ -328,25 +328,27 @@ class FtileRepeat extends AbstractFtile {
|
|||||||
final double y2 = p2.getY() + dimDiamond1.getHeight() / 2;
|
final double y2 = p2.getY() + dimDiamond1.getHeight() / 2;
|
||||||
|
|
||||||
final double x1_a = p1.getX() + dimDiamond2.getWidth();
|
final double x1_a = p1.getX() + dimDiamond2.getWidth();
|
||||||
|
|
||||||
final double x1_b = p1.getX() + dimDiamond2.getWidth() / 2 + dimRepeat.getWidth() / 2
|
final double x1_b = p1.getX() + dimDiamond2.getWidth() / 2 + dimRepeat.getWidth() / 2
|
||||||
+ Hexagon.hexagonHalfSize;
|
+ Hexagon.hexagonHalfSize;
|
||||||
|
|
||||||
UPolygon arrow = Arrows.asToLeft();
|
final Snake snake;
|
||||||
if (x1_b < x2) {
|
if (x2 < x1_a) {
|
||||||
arrow = Arrows.asToRight();
|
snake = Snake.create(arrowColor, Arrows.asToLeft()).emphasizeDirection(Direction.UP);
|
||||||
x2 = p2.getX();
|
snake.addPoint(x1_a, y1);
|
||||||
}
|
if (x1_a < x1_b) {
|
||||||
final Snake snake = Snake.create(arrowColor, arrow).emphasizeDirection(Direction.UP);
|
snake.addPoint(x1_b, y1);
|
||||||
|
snake.addPoint(x1_b, y2);
|
||||||
snake.addPoint(x1_a, y1);
|
} else {
|
||||||
if (x1_a < x1_b) {
|
snake.addPoint(x1_a + 10, y1);
|
||||||
snake.addPoint(x1_b, y1);
|
snake.addPoint(x1_a + 10, y2);
|
||||||
snake.addPoint(x1_b, y2);
|
}
|
||||||
} else {
|
} else {
|
||||||
snake.addPoint(x1_a + 10, y1);
|
x2 = p2.getX();
|
||||||
snake.addPoint(x1_a + 10, y2);
|
snake = Snake.create(arrowColor, Arrows.asToRight()).emphasizeDirection(Direction.UP);
|
||||||
|
snake.addPoint(x1_a, y1);
|
||||||
|
final double middle = x1_a / 4 + x2 * 3 / 4;
|
||||||
|
snake.addPoint(middle, y1);
|
||||||
|
snake.addPoint(middle, y2);
|
||||||
}
|
}
|
||||||
snake.addPoint(x2, y2);
|
snake.addPoint(x2, y2);
|
||||||
ug.draw(snake);
|
ug.draw(snake);
|
||||||
|
@ -41,6 +41,7 @@ import java.util.List;
|
|||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
import net.sourceforge.plantuml.command.Command;
|
import net.sourceforge.plantuml.command.Command;
|
||||||
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
||||||
|
import net.sourceforge.plantuml.command.CommonCommands;
|
||||||
import net.sourceforge.plantuml.core.DiagramType;
|
import net.sourceforge.plantuml.core.DiagramType;
|
||||||
import net.sourceforge.plantuml.core.UmlSource;
|
import net.sourceforge.plantuml.core.UmlSource;
|
||||||
|
|
||||||
@ -54,7 +55,7 @@ public class BoardDiagramFactory extends PSystemCommandFactory {
|
|||||||
protected List<Command> createCommands() {
|
protected List<Command> createCommands() {
|
||||||
|
|
||||||
final List<Command> cmds = new ArrayList<>();
|
final List<Command> cmds = new ArrayList<>();
|
||||||
addCommonCommands1(cmds);
|
CommonCommands.addCommonCommands1(cmds);
|
||||||
cmds.add(new CommandBoardPlus());
|
cmds.add(new CommandBoardPlus());
|
||||||
// cmds.add(new CommandMindMapTabulation());
|
// cmds.add(new CommandMindMapTabulation());
|
||||||
// cmds.add(new CommandMindMapOrgmode());
|
// cmds.add(new CommandMindMapOrgmode());
|
||||||
|
@ -65,6 +65,7 @@ import net.sourceforge.plantuml.command.CommandPackage;
|
|||||||
import net.sourceforge.plantuml.command.CommandPackageEmpty;
|
import net.sourceforge.plantuml.command.CommandPackageEmpty;
|
||||||
import net.sourceforge.plantuml.command.CommandRankDir;
|
import net.sourceforge.plantuml.command.CommandRankDir;
|
||||||
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
||||||
|
import net.sourceforge.plantuml.command.CommonCommands;
|
||||||
import net.sourceforge.plantuml.command.note.CommandConstraintOnLinks;
|
import net.sourceforge.plantuml.command.note.CommandConstraintOnLinks;
|
||||||
import net.sourceforge.plantuml.command.note.CommandFactoryNote;
|
import net.sourceforge.plantuml.command.note.CommandFactoryNote;
|
||||||
import net.sourceforge.plantuml.command.note.CommandFactoryNoteOnEntity;
|
import net.sourceforge.plantuml.command.note.CommandFactoryNoteOnEntity;
|
||||||
@ -97,7 +98,7 @@ public class ClassDiagramFactory extends PSystemCommandFactory {
|
|||||||
|
|
||||||
cmds.add(new CommandAddMethod());
|
cmds.add(new CommandAddMethod());
|
||||||
|
|
||||||
addCommonHides(cmds);
|
CommonCommands.addCommonHides(cmds);
|
||||||
cmds.add(new CommandHideShow2());
|
cmds.add(new CommandHideShow2());
|
||||||
|
|
||||||
cmds.add(new CommandRemoveRestore());
|
cmds.add(new CommandRemoveRestore());
|
||||||
@ -154,8 +155,8 @@ public class ClassDiagramFactory extends PSystemCommandFactory {
|
|||||||
|
|
||||||
cmds.add(new CommandCreateElementMultilines(0));
|
cmds.add(new CommandCreateElementMultilines(0));
|
||||||
cmds.add(new CommandCreateElementMultilines(1));
|
cmds.add(new CommandCreateElementMultilines(1));
|
||||||
addTitleCommands(cmds);
|
CommonCommands.addTitleCommands(cmds);
|
||||||
addCommonCommands2(cmds);
|
CommonCommands.addCommonCommands2(cmds);
|
||||||
|
|
||||||
return cmds;
|
return cmds;
|
||||||
}
|
}
|
||||||
|
@ -50,8 +50,8 @@ import net.sourceforge.plantuml.command.regex.IRegex;
|
|||||||
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.RegexResult;
|
import net.sourceforge.plantuml.command.regex.RegexResult;
|
||||||
import net.sourceforge.plantuml.security.SImageIO;
|
|
||||||
import net.sourceforge.plantuml.security.SFile;
|
import net.sourceforge.plantuml.security.SFile;
|
||||||
|
import net.sourceforge.plantuml.security.SImageIO;
|
||||||
import net.sourceforge.plantuml.sprite.Sprite;
|
import net.sourceforge.plantuml.sprite.Sprite;
|
||||||
import net.sourceforge.plantuml.sprite.SpriteImage;
|
import net.sourceforge.plantuml.sprite.SpriteImage;
|
||||||
import net.sourceforge.plantuml.sprite.SpriteSvg;
|
import net.sourceforge.plantuml.sprite.SpriteSvg;
|
||||||
|
109
src/net/sourceforge/plantuml/command/CommonCommands.java
Normal file
109
src/net/sourceforge/plantuml/command/CommonCommands.java
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* 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.command;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.sourceforge.plantuml.classdiagram.command.CommandHideShowByGender;
|
||||||
|
import net.sourceforge.plantuml.classdiagram.command.CommandHideShowByVisibility;
|
||||||
|
import net.sourceforge.plantuml.sequencediagram.command.CommandSkin;
|
||||||
|
import net.sourceforge.plantuml.statediagram.command.CommandHideEmptyDescription;
|
||||||
|
import net.sourceforge.plantuml.style.CommandStyleImport;
|
||||||
|
import net.sourceforge.plantuml.style.CommandStyleMultilinesCSS;
|
||||||
|
|
||||||
|
public final class CommonCommands {
|
||||||
|
|
||||||
|
private CommonCommands() {
|
||||||
|
}
|
||||||
|
|
||||||
|
static public void addCommonCommands1(List<Command> cmds) {
|
||||||
|
addTitleCommands(cmds);
|
||||||
|
addCommonCommands2(cmds);
|
||||||
|
addCommonHides(cmds);
|
||||||
|
}
|
||||||
|
|
||||||
|
static public void addCommonCommands2(List<Command> cmds) {
|
||||||
|
cmds.add(new CommandNope());
|
||||||
|
cmds.add(new CommandPragma());
|
||||||
|
cmds.add(new CommandAssumeTransparent());
|
||||||
|
|
||||||
|
cmds.add(new CommandSkinParam());
|
||||||
|
cmds.add(new CommandSkinParamMultilines());
|
||||||
|
cmds.add(new CommandSkin());
|
||||||
|
cmds.add(new CommandMinwidth());
|
||||||
|
cmds.add(new CommandPage());
|
||||||
|
cmds.add(new CommandRotate());
|
||||||
|
cmds.add(new CommandScale());
|
||||||
|
cmds.add(new CommandScaleWidthAndHeight());
|
||||||
|
cmds.add(new CommandScaleWidthOrHeight());
|
||||||
|
cmds.add(new CommandScaleMaxWidth());
|
||||||
|
cmds.add(new CommandScaleMaxHeight());
|
||||||
|
cmds.add(new CommandScaleMaxWidthAndHeight());
|
||||||
|
cmds.add(new CommandAffineTransform());
|
||||||
|
cmds.add(new CommandAffineTransformMultiline());
|
||||||
|
final CommandFactorySprite factorySpriteCommand = new CommandFactorySprite();
|
||||||
|
cmds.add(factorySpriteCommand.createMultiLine(false));
|
||||||
|
cmds.add(factorySpriteCommand.createSingleLine());
|
||||||
|
cmds.add(new CommandSpriteFile());
|
||||||
|
|
||||||
|
cmds.add(new CommandStyleMultilinesCSS());
|
||||||
|
cmds.add(new CommandStyleImport());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static public void addCommonHides(List<Command> cmds) {
|
||||||
|
cmds.add(new CommandHideEmptyDescription());
|
||||||
|
cmds.add(new CommandHideShowByVisibility());
|
||||||
|
cmds.add(new CommandHideShowByGender());
|
||||||
|
}
|
||||||
|
|
||||||
|
static public void addTitleCommands(List<Command> cmds) {
|
||||||
|
cmds.add(new CommandTitle());
|
||||||
|
cmds.add(new CommandMainframe());
|
||||||
|
cmds.add(new CommandCaption());
|
||||||
|
cmds.add(new CommandMultilinesCaption());
|
||||||
|
cmds.add(new CommandMultilinesTitle());
|
||||||
|
cmds.add(new CommandMultilinesLegend());
|
||||||
|
cmds.add(new CommandLegend());
|
||||||
|
|
||||||
|
cmds.add(new CommandFooter());
|
||||||
|
cmds.add(new CommandMultilinesFooter());
|
||||||
|
|
||||||
|
cmds.add(new CommandHeader());
|
||||||
|
cmds.add(new CommandMultilinesHeader());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -35,9 +35,6 @@
|
|||||||
*/
|
*/
|
||||||
package net.sourceforge.plantuml.command;
|
package net.sourceforge.plantuml.command;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.AbstractPSystem;
|
import net.sourceforge.plantuml.AbstractPSystem;
|
||||||
@ -46,17 +43,11 @@ import net.sourceforge.plantuml.ErrorUmlType;
|
|||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
import net.sourceforge.plantuml.LineLocation;
|
import net.sourceforge.plantuml.LineLocation;
|
||||||
import net.sourceforge.plantuml.StringLocated;
|
import net.sourceforge.plantuml.StringLocated;
|
||||||
import net.sourceforge.plantuml.classdiagram.command.CommandHideShowByGender;
|
|
||||||
import net.sourceforge.plantuml.classdiagram.command.CommandHideShowByVisibility;
|
|
||||||
import net.sourceforge.plantuml.core.Diagram;
|
import net.sourceforge.plantuml.core.Diagram;
|
||||||
import net.sourceforge.plantuml.core.DiagramType;
|
import net.sourceforge.plantuml.core.DiagramType;
|
||||||
import net.sourceforge.plantuml.core.UmlSource;
|
import net.sourceforge.plantuml.core.UmlSource;
|
||||||
import net.sourceforge.plantuml.error.PSystemError;
|
import net.sourceforge.plantuml.error.PSystemError;
|
||||||
import net.sourceforge.plantuml.error.PSystemErrorUtils;
|
import net.sourceforge.plantuml.error.PSystemErrorUtils;
|
||||||
import net.sourceforge.plantuml.sequencediagram.command.CommandSkin;
|
|
||||||
import net.sourceforge.plantuml.statediagram.command.CommandHideEmptyDescription;
|
|
||||||
import net.sourceforge.plantuml.style.CommandStyleImport;
|
|
||||||
import net.sourceforge.plantuml.style.CommandStyleMultilinesCSS;
|
|
||||||
import net.sourceforge.plantuml.utils.StartUtils;
|
import net.sourceforge.plantuml.utils.StartUtils;
|
||||||
import net.sourceforge.plantuml.version.IteratorCounter2;
|
import net.sourceforge.plantuml.version.IteratorCounter2;
|
||||||
|
|
||||||
@ -64,6 +55,10 @@ public abstract class PSystemCommandFactory extends PSystemAbstractFactory {
|
|||||||
|
|
||||||
private List<Command> cmds;
|
private List<Command> cmds;
|
||||||
|
|
||||||
|
protected abstract List<Command> createCommands();
|
||||||
|
|
||||||
|
public abstract AbstractPSystem createEmptyDiagram(UmlSource source, ISkinSimple skinParam);
|
||||||
|
|
||||||
protected PSystemCommandFactory() {
|
protected PSystemCommandFactory() {
|
||||||
this(DiagramType.UML);
|
this(DiagramType.UML);
|
||||||
}
|
}
|
||||||
@ -76,23 +71,22 @@ public abstract class PSystemCommandFactory extends PSystemAbstractFactory {
|
|||||||
final public Diagram createSystem(UmlSource source, ISkinSimple skinParam) {
|
final public Diagram createSystem(UmlSource source, ISkinSimple skinParam) {
|
||||||
final IteratorCounter2 it = source.iterator2();
|
final IteratorCounter2 it = source.iterator2();
|
||||||
final StringLocated startLine = it.next();
|
final StringLocated startLine = it.next();
|
||||||
if (StartUtils.isArobaseStartDiagram(startLine.getString()) == false) {
|
if (StartUtils.isArobaseStartDiagram(startLine.getString()) == false)
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
|
||||||
|
|
||||||
if (source.isEmpty()) {
|
if (source.isEmpty()) {
|
||||||
if (it.hasNext()) {
|
if (it.hasNext())
|
||||||
it.next();
|
it.next();
|
||||||
}
|
|
||||||
return buildEmptyError(source, startLine.getLocation(), it.getTrace());
|
return buildEmptyError(source, startLine.getLocation(), it.getTrace());
|
||||||
}
|
}
|
||||||
AbstractPSystem sys = createEmptyDiagram(source, skinParam);
|
AbstractPSystem sys = createEmptyDiagram(source, skinParam);
|
||||||
|
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
if (StartUtils.isArobaseEndDiagram(it.peek().getString())) {
|
if (StartUtils.isArobaseEndDiagram(it.peek().getString())) {
|
||||||
if (sys == null) {
|
if (sys == null)
|
||||||
return null;
|
return null;
|
||||||
}
|
|
||||||
final String err = sys.checkFinalError();
|
final String err = sys.checkFinalError();
|
||||||
if (err != null) {
|
if (err != null) {
|
||||||
final LineLocation location = it.next().getLocation();
|
final LineLocation location = it.next().getLocation();
|
||||||
@ -103,15 +97,15 @@ public abstract class PSystemCommandFactory extends PSystemAbstractFactory {
|
|||||||
return buildEmptyError(source, location, it.getTrace());
|
return buildEmptyError(source, location, it.getTrace());
|
||||||
}
|
}
|
||||||
sys.makeDiagramReady();
|
sys.makeDiagramReady();
|
||||||
if (sys.isOk() == false) {
|
if (sys.isOk() == false)
|
||||||
return null;
|
return null;
|
||||||
}
|
|
||||||
return sys;
|
return sys;
|
||||||
}
|
}
|
||||||
sys = executeFewLines(sys, source, it);
|
sys = executeFewLines(sys, source, it);
|
||||||
if (sys instanceof PSystemError) {
|
if (sys instanceof PSystemError)
|
||||||
return sys;
|
return sys;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return sys;
|
return sys;
|
||||||
|
|
||||||
@ -132,9 +126,9 @@ public abstract class PSystemCommandFactory extends PSystemAbstractFactory {
|
|||||||
location);
|
location);
|
||||||
sys = PSystemErrorUtils.buildV2(source, err, result.getDebugLines(), it.getTrace());
|
sys = PSystemErrorUtils.buildV2(source, err, result.getDebugLines(), it.getTrace());
|
||||||
}
|
}
|
||||||
if (result.getNewDiagram() != null) {
|
if (result.getNewDiagram() != null)
|
||||||
sys = result.getNewDiagram();
|
sys = result.getNewDiagram();
|
||||||
}
|
|
||||||
return sys;
|
return sys;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -152,9 +146,9 @@ public abstract class PSystemCommandFactory extends PSystemAbstractFactory {
|
|||||||
|
|
||||||
private Step getCandidate(final IteratorCounter2 it) {
|
private Step getCandidate(final IteratorCounter2 it) {
|
||||||
final BlocLines single = BlocLines.single(it.peek());
|
final BlocLines single = BlocLines.single(it.peek());
|
||||||
if (cmds == null) {
|
if (cmds == null)
|
||||||
cmds = createCommands();
|
cmds = createCommands();
|
||||||
}
|
|
||||||
for (Command cmd : cmds) {
|
for (Command cmd : cmds) {
|
||||||
final CommandControl result = cmd.isValid(single);
|
final CommandControl result = cmd.isValid(single);
|
||||||
if (result == CommandControl.OK) {
|
if (result == CommandControl.OK) {
|
||||||
@ -164,9 +158,9 @@ public abstract class PSystemCommandFactory extends PSystemAbstractFactory {
|
|||||||
if (result == CommandControl.OK_PARTIAL) {
|
if (result == CommandControl.OK_PARTIAL) {
|
||||||
final IteratorCounter2 cloned = it.cloneMe();
|
final IteratorCounter2 cloned = it.cloneMe();
|
||||||
final BlocLines lines = isMultilineCommandOk(cloned, cmd);
|
final BlocLines lines = isMultilineCommandOk(cloned, cmd);
|
||||||
if (lines == null) {
|
if (lines == null)
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
it.copyStateFrom(cloned);
|
it.copyStateFrom(cloned);
|
||||||
assert lines != null;
|
assert lines != null;
|
||||||
return new Step(cmd, lines);
|
return new Step(cmd, lines);
|
||||||
@ -181,16 +175,16 @@ public abstract class PSystemCommandFactory extends PSystemAbstractFactory {
|
|||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
lines = addOneSingleLineManageEmbedded2(it, lines);
|
lines = addOneSingleLineManageEmbedded2(it, lines);
|
||||||
final CommandControl result = cmd.isValid(lines);
|
final CommandControl result = cmd.isValid(lines);
|
||||||
if (result == CommandControl.NOT_OK) {
|
if (result == CommandControl.NOT_OK)
|
||||||
return null;
|
return null;
|
||||||
}
|
|
||||||
if (result == CommandControl.OK) {
|
if (result == CommandControl.OK)
|
||||||
return lines;
|
return lines;
|
||||||
}
|
|
||||||
nb++;
|
nb++;
|
||||||
if (cmd instanceof CommandDecoratorMultine && nb > ((CommandDecoratorMultine) cmd).getNbMaxLines()) {
|
if (cmd instanceof CommandDecoratorMultine && nb > ((CommandDecoratorMultine) cmd).getNbMaxLines())
|
||||||
return null;
|
return null;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -202,84 +196,12 @@ public abstract class PSystemCommandFactory extends PSystemAbstractFactory {
|
|||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
final StringLocated s = it.next();
|
final StringLocated s = it.next();
|
||||||
lines = lines.add(s);
|
lines = lines.add(s);
|
||||||
if (s.getTrimmed().getString().equals("}}")) {
|
if (s.getTrimmed().getString().equals("}}"))
|
||||||
return lines;
|
return lines;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return lines;
|
return lines;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------
|
|
||||||
|
|
||||||
protected abstract List<Command> createCommands();
|
|
||||||
|
|
||||||
public abstract AbstractPSystem createEmptyDiagram(UmlSource source, ISkinSimple skinParam);
|
|
||||||
|
|
||||||
final protected void addCommonCommands1(List<Command> cmds) {
|
|
||||||
addTitleCommands(cmds);
|
|
||||||
addCommonCommands2(cmds);
|
|
||||||
addCommonHides(cmds);
|
|
||||||
}
|
|
||||||
|
|
||||||
final protected void addCommonCommands2(List<Command> cmds) {
|
|
||||||
cmds.add(new CommandNope());
|
|
||||||
cmds.add(new CommandPragma());
|
|
||||||
cmds.add(new CommandAssumeTransparent());
|
|
||||||
|
|
||||||
cmds.add(new CommandSkinParam());
|
|
||||||
cmds.add(new CommandSkinParamMultilines());
|
|
||||||
cmds.add(new CommandSkin());
|
|
||||||
cmds.add(new CommandMinwidth());
|
|
||||||
cmds.add(new CommandPage());
|
|
||||||
cmds.add(new CommandRotate());
|
|
||||||
cmds.add(new CommandScale());
|
|
||||||
cmds.add(new CommandScaleWidthAndHeight());
|
|
||||||
cmds.add(new CommandScaleWidthOrHeight());
|
|
||||||
cmds.add(new CommandScaleMaxWidth());
|
|
||||||
cmds.add(new CommandScaleMaxHeight());
|
|
||||||
cmds.add(new CommandScaleMaxWidthAndHeight());
|
|
||||||
cmds.add(new CommandAffineTransform());
|
|
||||||
cmds.add(new CommandAffineTransformMultiline());
|
|
||||||
final CommandFactorySprite factorySpriteCommand = new CommandFactorySprite();
|
|
||||||
cmds.add(factorySpriteCommand.createMultiLine(false));
|
|
||||||
cmds.add(factorySpriteCommand.createSingleLine());
|
|
||||||
cmds.add(new CommandSpriteFile());
|
|
||||||
|
|
||||||
cmds.add(new CommandStyleMultilinesCSS());
|
|
||||||
cmds.add(new CommandStyleImport());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
final protected void addCommonHides(List<Command> cmds) {
|
|
||||||
cmds.add(new CommandHideEmptyDescription());
|
|
||||||
cmds.add(new CommandHideShowByVisibility());
|
|
||||||
cmds.add(new CommandHideShowByGender());
|
|
||||||
}
|
|
||||||
|
|
||||||
final protected void addTitleCommands(List<Command> cmds) {
|
|
||||||
cmds.add(new CommandTitle());
|
|
||||||
cmds.add(new CommandMainframe());
|
|
||||||
cmds.add(new CommandCaption());
|
|
||||||
cmds.add(new CommandMultilinesCaption());
|
|
||||||
cmds.add(new CommandMultilinesTitle());
|
|
||||||
cmds.add(new CommandMultilinesLegend());
|
|
||||||
cmds.add(new CommandLegend());
|
|
||||||
|
|
||||||
cmds.add(new CommandFooter());
|
|
||||||
cmds.add(new CommandMultilinesFooter());
|
|
||||||
|
|
||||||
cmds.add(new CommandHeader());
|
|
||||||
cmds.add(new CommandMultilinesHeader());
|
|
||||||
}
|
|
||||||
|
|
||||||
final public List<String> getDescription() {
|
|
||||||
final List<String> result = new ArrayList<>();
|
|
||||||
for (Command cmd : createCommands()) {
|
|
||||||
result.addAll(Arrays.asList(cmd.getDescription()));
|
|
||||||
}
|
|
||||||
return Collections.unmodifiableList(result);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -41,6 +41,7 @@ import java.util.List;
|
|||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
import net.sourceforge.plantuml.command.Command;
|
import net.sourceforge.plantuml.command.Command;
|
||||||
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
||||||
|
import net.sourceforge.plantuml.command.CommonCommands;
|
||||||
import net.sourceforge.plantuml.compositediagram.command.CommandCreateBlock;
|
import net.sourceforge.plantuml.compositediagram.command.CommandCreateBlock;
|
||||||
import net.sourceforge.plantuml.compositediagram.command.CommandCreatePackageBlock;
|
import net.sourceforge.plantuml.compositediagram.command.CommandCreatePackageBlock;
|
||||||
import net.sourceforge.plantuml.compositediagram.command.CommandEndPackageBlock;
|
import net.sourceforge.plantuml.compositediagram.command.CommandEndPackageBlock;
|
||||||
@ -62,7 +63,7 @@ public class CompositeDiagramFactory extends PSystemCommandFactory {
|
|||||||
cmds.add(new CommandLinkBlock());
|
cmds.add(new CommandLinkBlock());
|
||||||
cmds.add(new CommandCreatePackageBlock());
|
cmds.add(new CommandCreatePackageBlock());
|
||||||
cmds.add(new CommandEndPackageBlock());
|
cmds.add(new CommandEndPackageBlock());
|
||||||
addCommonCommands1(cmds);
|
CommonCommands.addCommonCommands1(cmds);
|
||||||
|
|
||||||
return cmds;
|
return cmds;
|
||||||
}
|
}
|
||||||
|
@ -38,84 +38,86 @@ package net.sourceforge.plantuml.core;
|
|||||||
import net.sourceforge.plantuml.utils.StartUtils;
|
import net.sourceforge.plantuml.utils.StartUtils;
|
||||||
|
|
||||||
public enum DiagramType {
|
public enum DiagramType {
|
||||||
UML, BPM, DITAA, DOT, PROJECT, JCCKIT, SALT, FLOW, CREOLE, JUNGLE, CUTE, MATH, LATEX,
|
UML, BPM, DITAA, DOT, PROJECT, JCCKIT, SALT, FLOW, CREOLE, JUNGLE, CUTE, MATH, LATEX, DEFINITION, GANTT, NW,
|
||||||
DEFINITION, GANTT, NW, MINDMAP, WBS, WIRE, JSON, GIT, BOARD, YAML,
|
MINDMAP, WBS, WIRE, JSON, GIT, BOARD, YAML, HCL, UNKNOWN;
|
||||||
UNKNOWN;
|
|
||||||
|
|
||||||
static public DiagramType getTypeFromArobaseStart(String s) {
|
static public DiagramType getTypeFromArobaseStart(String s) {
|
||||||
s = s.toLowerCase();
|
s = s.toLowerCase();
|
||||||
// if (s.startsWith("@startuml2")) {
|
// if (s.startsWith("@startuml2")) {
|
||||||
// return UML2;
|
// return UML2;
|
||||||
// }
|
// }
|
||||||
if (StartUtils.startsWithSymbolAnd("startwire", s)) {
|
if (StartUtils.startsWithSymbolAnd("startwire", s))
|
||||||
return WIRE;
|
return WIRE;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("startbpm", s)) {
|
if (StartUtils.startsWithSymbolAnd("startbpm", s))
|
||||||
return BPM;
|
return BPM;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("startuml", s)) {
|
if (StartUtils.startsWithSymbolAnd("startuml", s))
|
||||||
return UML;
|
return UML;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("startdot", s)) {
|
if (StartUtils.startsWithSymbolAnd("startdot", s))
|
||||||
return DOT;
|
return DOT;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("startjcckit", s)) {
|
if (StartUtils.startsWithSymbolAnd("startjcckit", s))
|
||||||
return JCCKIT;
|
return JCCKIT;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("startditaa", s)) {
|
if (StartUtils.startsWithSymbolAnd("startditaa", s))
|
||||||
return DITAA;
|
return DITAA;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("startproject", s)) {
|
if (StartUtils.startsWithSymbolAnd("startproject", s))
|
||||||
return PROJECT;
|
return PROJECT;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("startsalt", s)) {
|
if (StartUtils.startsWithSymbolAnd("startsalt", s))
|
||||||
return SALT;
|
return SALT;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("startflow", s)) {
|
if (StartUtils.startsWithSymbolAnd("startflow", s))
|
||||||
return FLOW;
|
return FLOW;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("startcreole", s)) {
|
if (StartUtils.startsWithSymbolAnd("startcreole", s))
|
||||||
return CREOLE;
|
return CREOLE;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("starttree", s)) {
|
if (StartUtils.startsWithSymbolAnd("starttree", s))
|
||||||
return JUNGLE;
|
return JUNGLE;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("startcute", s)) {
|
if (StartUtils.startsWithSymbolAnd("startcute", s))
|
||||||
return CUTE;
|
return CUTE;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("startmath", s)) {
|
if (StartUtils.startsWithSymbolAnd("startmath", s))
|
||||||
return MATH;
|
return MATH;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("startlatex", s)) {
|
if (StartUtils.startsWithSymbolAnd("startlatex", s))
|
||||||
return LATEX;
|
return LATEX;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("startdef", s)) {
|
if (StartUtils.startsWithSymbolAnd("startdef", s))
|
||||||
return DEFINITION;
|
return DEFINITION;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("startgantt", s)) {
|
if (StartUtils.startsWithSymbolAnd("startgantt", s))
|
||||||
return GANTT;
|
return GANTT;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("startnwdiag", s)) {
|
if (StartUtils.startsWithSymbolAnd("startnwdiag", s))
|
||||||
return NW;
|
return NW;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("startmindmap", s)) {
|
if (StartUtils.startsWithSymbolAnd("startmindmap", s))
|
||||||
return MINDMAP;
|
return MINDMAP;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("startwbs", s)) {
|
if (StartUtils.startsWithSymbolAnd("startwbs", s))
|
||||||
return WBS;
|
return WBS;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("startjson", s)) {
|
if (StartUtils.startsWithSymbolAnd("startjson", s))
|
||||||
return JSON;
|
return JSON;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("startgit", s)) {
|
if (StartUtils.startsWithSymbolAnd("startgit", s))
|
||||||
return GIT;
|
return GIT;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("startboard", s)) {
|
if (StartUtils.startsWithSymbolAnd("startboard", s))
|
||||||
return BOARD;
|
return BOARD;
|
||||||
}
|
|
||||||
if (StartUtils.startsWithSymbolAnd("startyaml", s)) {
|
if (StartUtils.startsWithSymbolAnd("startyaml", s))
|
||||||
return YAML;
|
return YAML;
|
||||||
}
|
|
||||||
|
if (StartUtils.startsWithSymbolAnd("starthcl", s))
|
||||||
|
return HCL;
|
||||||
|
|
||||||
return UNKNOWN;
|
return UNKNOWN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,9 +46,9 @@ import net.sourceforge.plantuml.classdiagram.command.CommandUrl;
|
|||||||
import net.sourceforge.plantuml.command.Command;
|
import net.sourceforge.plantuml.command.Command;
|
||||||
import net.sourceforge.plantuml.command.CommandEndPackage;
|
import net.sourceforge.plantuml.command.CommandEndPackage;
|
||||||
import net.sourceforge.plantuml.command.CommandFootboxIgnored;
|
import net.sourceforge.plantuml.command.CommandFootboxIgnored;
|
||||||
import net.sourceforge.plantuml.command.CommandPage;
|
|
||||||
import net.sourceforge.plantuml.command.CommandRankDir;
|
import net.sourceforge.plantuml.command.CommandRankDir;
|
||||||
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
||||||
|
import net.sourceforge.plantuml.command.CommonCommands;
|
||||||
import net.sourceforge.plantuml.command.note.CommandFactoryNote;
|
import net.sourceforge.plantuml.command.note.CommandFactoryNote;
|
||||||
import net.sourceforge.plantuml.command.note.CommandFactoryNoteOnEntity;
|
import net.sourceforge.plantuml.command.note.CommandFactoryNoteOnEntity;
|
||||||
import net.sourceforge.plantuml.command.note.CommandFactoryNoteOnLink;
|
import net.sourceforge.plantuml.command.note.CommandFactoryNoteOnLink;
|
||||||
@ -78,7 +78,7 @@ public class DescriptionDiagramFactory extends PSystemCommandFactory {
|
|||||||
cmds.add(new CommandNamespaceSeparator());
|
cmds.add(new CommandNamespaceSeparator());
|
||||||
cmds.add(new CommandRankDir());
|
cmds.add(new CommandRankDir());
|
||||||
cmds.add(new CommandNewpage(this));
|
cmds.add(new CommandNewpage(this));
|
||||||
addCommonCommands1(cmds);
|
CommonCommands.addCommonCommands1(cmds);
|
||||||
|
|
||||||
cmds.add(new CommandLinkElement());
|
cmds.add(new CommandLinkElement());
|
||||||
cmds.add(new CommandHideShow2());
|
cmds.add(new CommandHideShow2());
|
||||||
@ -92,7 +92,7 @@ public class DescriptionDiagramFactory extends PSystemCommandFactory {
|
|||||||
final CommandFactoryNoteOnLink factoryNoteOnLinkCommand = new CommandFactoryNoteOnLink();
|
final CommandFactoryNoteOnLink factoryNoteOnLinkCommand = new CommandFactoryNoteOnLink();
|
||||||
cmds.add(factoryNoteOnLinkCommand.createSingleLine());
|
cmds.add(factoryNoteOnLinkCommand.createSingleLine());
|
||||||
cmds.add(factoryNoteOnLinkCommand.createMultiLine(false));
|
cmds.add(factoryNoteOnLinkCommand.createMultiLine(false));
|
||||||
|
|
||||||
final CommandFactoryNoteOnEntity factoryNoteOnEntityCommand = new CommandFactoryNoteOnEntity("desc",
|
final CommandFactoryNoteOnEntity factoryNoteOnEntityCommand = new CommandFactoryNoteOnEntity("desc",
|
||||||
new RegexOr("ENTITY", //
|
new RegexOr("ENTITY", //
|
||||||
new RegexLeaf("[%pLN_.]+"), //
|
new RegexLeaf("[%pLN_.]+"), //
|
||||||
@ -115,7 +115,6 @@ public class DescriptionDiagramFactory extends PSystemCommandFactory {
|
|||||||
cmds.add(factoryNoteOnEntityCommand.createMultiLine(false));
|
cmds.add(factoryNoteOnEntityCommand.createMultiLine(false));
|
||||||
cmds.add(factoryNoteCommand.createMultiLine(false));
|
cmds.add(factoryNoteCommand.createMultiLine(false));
|
||||||
|
|
||||||
|
|
||||||
// cmds.add(new CommandHideShowSpecificClass());
|
// cmds.add(new CommandHideShowSpecificClass());
|
||||||
|
|
||||||
cmds.add(new CommandArchimate());
|
cmds.add(new CommandArchimate());
|
||||||
|
91
src/net/sourceforge/plantuml/hcl/HclDiagramFactory.java
Normal file
91
src/net/sourceforge/plantuml/hcl/HclDiagramFactory.java
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* 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.hcl;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.UmlDiagramType;
|
||||||
|
import net.sourceforge.plantuml.command.PSystemAbstractFactory;
|
||||||
|
import net.sourceforge.plantuml.core.Diagram;
|
||||||
|
import net.sourceforge.plantuml.core.DiagramType;
|
||||||
|
import net.sourceforge.plantuml.core.UmlSource;
|
||||||
|
import net.sourceforge.plantuml.json.JsonValue;
|
||||||
|
import net.sourceforge.plantuml.jsondiagram.JsonDiagram;
|
||||||
|
import net.sourceforge.plantuml.jsondiagram.StyleExtractor;
|
||||||
|
|
||||||
|
public class HclDiagramFactory extends PSystemAbstractFactory {
|
||||||
|
|
||||||
|
public HclDiagramFactory() {
|
||||||
|
super(DiagramType.HCL);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Diagram createSystem(UmlSource source, ISkinSimple skinParam) {
|
||||||
|
final List<String> highlighted = new ArrayList<>();
|
||||||
|
JsonValue data = null;
|
||||||
|
StyleExtractor styleExtractor = null;
|
||||||
|
try {
|
||||||
|
final HclSource list = new HclSource();
|
||||||
|
styleExtractor = new StyleExtractor(source.iterator2());
|
||||||
|
final Iterator<String> it = styleExtractor.getIterator();
|
||||||
|
it.next();
|
||||||
|
while (true) {
|
||||||
|
final String line = it.next();
|
||||||
|
if (it.hasNext() == false)
|
||||||
|
break;
|
||||||
|
|
||||||
|
list.add(line);
|
||||||
|
}
|
||||||
|
HclParser parser = new HclParser(list);
|
||||||
|
data = parser.parseMe();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
final JsonDiagram result = new JsonDiagram(source, UmlDiagramType.HCL, data, highlighted);
|
||||||
|
// if (styleExtractor != null) {
|
||||||
|
// styleExtractor.applyStyles(result.getSkinParam());
|
||||||
|
// final String title = styleExtractor.getTitle();
|
||||||
|
// if (title != null)
|
||||||
|
// result.setTitle(DisplayPositioned.single(Display.getWithNewlines(title), HorizontalAlignment.CENTER,
|
||||||
|
// VerticalAlignment.CENTER));
|
||||||
|
// }
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
258
src/net/sourceforge/plantuml/hcl/HclParser.java
Normal file
258
src/net/sourceforge/plantuml/hcl/HclParser.java
Normal file
@ -0,0 +1,258 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* 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.hcl;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import net.sourceforge.plantuml.json.Json;
|
||||||
|
import net.sourceforge.plantuml.json.JsonArray;
|
||||||
|
import net.sourceforge.plantuml.json.JsonObject;
|
||||||
|
import net.sourceforge.plantuml.json.JsonString;
|
||||||
|
import net.sourceforge.plantuml.json.JsonValue;
|
||||||
|
|
||||||
|
public class HclParser {
|
||||||
|
|
||||||
|
private final List<HclTerm> terms = new ArrayList<HclTerm>();
|
||||||
|
|
||||||
|
public HclParser(Iterable<Character> source) {
|
||||||
|
parse(source.iterator());
|
||||||
|
}
|
||||||
|
|
||||||
|
public JsonObject parseMe() {
|
||||||
|
final Map<String, JsonObject> map = new LinkedHashMap<>();
|
||||||
|
final Iterator<HclTerm> it = terms.iterator();
|
||||||
|
while (it.hasNext())
|
||||||
|
map.putAll(getModuleOrSomething(it));
|
||||||
|
|
||||||
|
if (map.size() == 1)
|
||||||
|
return map.values().iterator().next();
|
||||||
|
|
||||||
|
final JsonObject result = new JsonObject();
|
||||||
|
for (Entry<String, JsonObject> ent : map.entrySet())
|
||||||
|
result.add(ent.getKey(), ent.getValue());
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<String, JsonObject> getModuleOrSomething(Iterator<HclTerm> it) {
|
||||||
|
final StringBuilder name = new StringBuilder();
|
||||||
|
while (true) {
|
||||||
|
final HclTerm current = it.next();
|
||||||
|
if (current.is(SymbolType.STRING_QUOTED))
|
||||||
|
name.append("\"" + current.getData() + "\" ");
|
||||||
|
else if (current.is(SymbolType.STRING_SIMPLE))
|
||||||
|
name.append(current.getData() + " ");
|
||||||
|
else if (current.is(SymbolType.CURLY_BRACKET_OPEN)) {
|
||||||
|
return Collections.singletonMap(name.toString().trim(), getBracketData(it));
|
||||||
|
} else
|
||||||
|
throw new IllegalStateException(current.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private JsonValue getFunctionData(String functionName, Iterator<HclTerm> it) {
|
||||||
|
final JsonArray args = new JsonArray();
|
||||||
|
if (it.next().is(SymbolType.PARENTHESIS_OPEN) == false)
|
||||||
|
throw new IllegalStateException();
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
final Object value = getValue(it);
|
||||||
|
if (value instanceof HclTerm && ((HclTerm) value).is(SymbolType.PARENTHESIS_CLOSE)) {
|
||||||
|
if (args.size() == 0)
|
||||||
|
return Json.value(functionName + "()");
|
||||||
|
final JsonObject result = new JsonObject();
|
||||||
|
result.add(functionName + "()", args);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
if (value instanceof HclTerm && ((HclTerm) value).is(SymbolType.COMMA))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (value instanceof String)
|
||||||
|
args.add((String) value);
|
||||||
|
else if (value instanceof JsonArray)
|
||||||
|
args.add((JsonArray) value);
|
||||||
|
else if (value instanceof JsonObject)
|
||||||
|
args.add((JsonObject) value);
|
||||||
|
else if (value instanceof JsonString)
|
||||||
|
args.add((JsonString) value);
|
||||||
|
else
|
||||||
|
throw new IllegalStateException();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private JsonObject getBracketData(Iterator<HclTerm> it) {
|
||||||
|
final JsonObject result = new JsonObject();
|
||||||
|
while (true) {
|
||||||
|
final HclTerm current = it.next();
|
||||||
|
if (current.is(SymbolType.CURLY_BRACKET_CLOSE))
|
||||||
|
return result;
|
||||||
|
if (current.is(SymbolType.STRING_SIMPLE) || current.is(SymbolType.STRING_QUOTED)) {
|
||||||
|
final String fieldName = current.getData();
|
||||||
|
final HclTerm next = it.next();
|
||||||
|
if (next.is(SymbolType.EQUALS, SymbolType.TWO_POINTS) == false)
|
||||||
|
throw new IllegalStateException(current.toString());
|
||||||
|
final Object value = getValue(it);
|
||||||
|
if (value instanceof String)
|
||||||
|
result.add(fieldName, (String) value);
|
||||||
|
else if (value instanceof JsonArray)
|
||||||
|
result.add(fieldName, (JsonArray) value);
|
||||||
|
else if (value instanceof JsonObject)
|
||||||
|
result.add(fieldName, (JsonObject) value);
|
||||||
|
else if (value instanceof JsonString)
|
||||||
|
result.add(fieldName, (JsonString) value);
|
||||||
|
else
|
||||||
|
throw new IllegalStateException();
|
||||||
|
|
||||||
|
} else
|
||||||
|
throw new IllegalStateException(current.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Object getValue(Iterator<HclTerm> it) {
|
||||||
|
final HclTerm current = it.next();
|
||||||
|
if (current.is(SymbolType.COMMA, SymbolType.PARENTHESIS_CLOSE))
|
||||||
|
return current;
|
||||||
|
if (current.is(SymbolType.STRING_QUOTED))
|
||||||
|
return current.getData();
|
||||||
|
if (current.is(SymbolType.STRING_SIMPLE))
|
||||||
|
return current.getData();
|
||||||
|
if (current.is(SymbolType.SQUARE_BRACKET_OPEN))
|
||||||
|
return getArray(it);
|
||||||
|
if (current.is(SymbolType.CURLY_BRACKET_OPEN))
|
||||||
|
return getBracketData(it);
|
||||||
|
if (current.is(SymbolType.FUNCTION_NAME))
|
||||||
|
return getFunctionData(current.getData(), it);
|
||||||
|
throw new IllegalStateException(current.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
private Object getArray(Iterator<HclTerm> it) {
|
||||||
|
final JsonArray result = new JsonArray();
|
||||||
|
while (true) {
|
||||||
|
final HclTerm current = it.next();
|
||||||
|
if (current.is(SymbolType.CURLY_BRACKET_OPEN))
|
||||||
|
result.add(getBracketData(it));
|
||||||
|
if (current.is(SymbolType.SQUARE_BRACKET_CLOSE))
|
||||||
|
return result;
|
||||||
|
if (current.is(SymbolType.COMMA))
|
||||||
|
continue;
|
||||||
|
if (current.is(SymbolType.STRING_QUOTED))
|
||||||
|
result.add(current.getData());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return terms.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void parse(Iterator<Character> it) {
|
||||||
|
final StringBuilder pendingString = new StringBuilder();
|
||||||
|
while (it.hasNext()) {
|
||||||
|
final char c = it.next();
|
||||||
|
final SymbolType type = getType(c);
|
||||||
|
if (type == SymbolType.PARENTHESIS_OPEN) {
|
||||||
|
if (pendingString.length() == 0)
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
terms.add(new HclTerm(SymbolType.FUNCTION_NAME, pendingString.toString()));
|
||||||
|
pendingString.setLength(0);
|
||||||
|
} else if (type != null && pendingString.length() > 0) {
|
||||||
|
terms.add(new HclTerm(SymbolType.STRING_SIMPLE, pendingString.toString()));
|
||||||
|
pendingString.setLength(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type == SymbolType.SPACE)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (type != null) {
|
||||||
|
terms.add(new HclTerm(type));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (c == '\"') {
|
||||||
|
final String s = eatUntilDoubleQuote(it);
|
||||||
|
terms.add(new HclTerm(SymbolType.STRING_QUOTED, s));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
pendingString.append(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String eatUntilDoubleQuote(Iterator<Character> it) {
|
||||||
|
final StringBuilder sb = new StringBuilder();
|
||||||
|
while (it.hasNext()) {
|
||||||
|
final char c = it.next();
|
||||||
|
if (c == '\\') {
|
||||||
|
sb.append(it.next());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (c == '\"')
|
||||||
|
return sb.toString();
|
||||||
|
sb.append(c);
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private SymbolType getType(final char c) {
|
||||||
|
if (Character.isSpaceChar(c))
|
||||||
|
return SymbolType.SPACE;
|
||||||
|
else if (c == '{')
|
||||||
|
return SymbolType.CURLY_BRACKET_OPEN;
|
||||||
|
else if (c == '}')
|
||||||
|
return SymbolType.CURLY_BRACKET_CLOSE;
|
||||||
|
else if (c == '[')
|
||||||
|
return SymbolType.SQUARE_BRACKET_OPEN;
|
||||||
|
else if (c == ']')
|
||||||
|
return SymbolType.SQUARE_BRACKET_CLOSE;
|
||||||
|
else if (c == '(')
|
||||||
|
return SymbolType.PARENTHESIS_OPEN;
|
||||||
|
else if (c == ')')
|
||||||
|
return SymbolType.PARENTHESIS_CLOSE;
|
||||||
|
else if (c == '=')
|
||||||
|
return SymbolType.EQUALS;
|
||||||
|
else if (c == ',')
|
||||||
|
return SymbolType.COMMA;
|
||||||
|
else if (c == ':')
|
||||||
|
return SymbolType.TWO_POINTS;
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
59
src/net/sourceforge/plantuml/hcl/HclSource.java
Normal file
59
src/net/sourceforge/plantuml/hcl/HclSource.java
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* 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.hcl;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class HclSource implements Iterable<Character> {
|
||||||
|
|
||||||
|
final private List<Character> all = new ArrayList<>();
|
||||||
|
|
||||||
|
public void add(String line) {
|
||||||
|
if (line.trim().startsWith("#"))
|
||||||
|
return;
|
||||||
|
for (char c : line.toCharArray())
|
||||||
|
all.add(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<Character> iterator() {
|
||||||
|
return Collections.unmodifiableList(all).iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
79
src/net/sourceforge/plantuml/hcl/HclTerm.java
Normal file
79
src/net/sourceforge/plantuml/hcl/HclTerm.java
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* 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.hcl;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class HclTerm {
|
||||||
|
|
||||||
|
private final SymbolType type;
|
||||||
|
private final String data;
|
||||||
|
|
||||||
|
public HclTerm(SymbolType type) {
|
||||||
|
this.type = type;
|
||||||
|
this.data = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HclTerm(SymbolType type, String data) {
|
||||||
|
this.type = type;
|
||||||
|
this.data = Objects.requireNonNull(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
if (data == null)
|
||||||
|
return type.toString();
|
||||||
|
|
||||||
|
return type + "(" + data + ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
public SymbolType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getData() {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean is(SymbolType type) {
|
||||||
|
return this.type == type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean is(SymbolType type1, SymbolType type2) {
|
||||||
|
return this.type == type1 || this.type == type2;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
53
src/net/sourceforge/plantuml/hcl/SymbolType.java
Normal file
53
src/net/sourceforge/plantuml/hcl/SymbolType.java
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* 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.hcl;
|
||||||
|
|
||||||
|
public enum SymbolType {
|
||||||
|
STRING_SIMPLE, //
|
||||||
|
STRING_QUOTED, //
|
||||||
|
FUNCTION_NAME, //
|
||||||
|
SQUARE_BRACKET_OPEN, //
|
||||||
|
SQUARE_BRACKET_CLOSE, //
|
||||||
|
CURLY_BRACKET_OPEN, //
|
||||||
|
CURLY_BRACKET_CLOSE, //
|
||||||
|
PARENTHESIS_OPEN, //
|
||||||
|
PARENTHESIS_CLOSE, //
|
||||||
|
TWO_POINTS, //
|
||||||
|
EQUALS, //
|
||||||
|
COMMA, //
|
||||||
|
SPACE; //
|
||||||
|
|
||||||
|
}
|
@ -81,6 +81,9 @@ public class JsonDiagram extends TitledDiagram {
|
|||||||
if (getUmlDiagramType() == UmlDiagramType.YAML) {
|
if (getUmlDiagramType() == UmlDiagramType.YAML) {
|
||||||
return new DiagramDescription("(Yaml)");
|
return new DiagramDescription("(Yaml)");
|
||||||
}
|
}
|
||||||
|
if (getUmlDiagramType() == UmlDiagramType.HCL) {
|
||||||
|
return new DiagramDescription("(HCL)");
|
||||||
|
}
|
||||||
return new DiagramDescription("(Json)");
|
return new DiagramDescription("(Json)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,7 +110,9 @@ public class SmetanaForJson {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private SName getDiagramType() {
|
private SName getDiagramType() {
|
||||||
return skinParam.getUmlDiagramType() == UmlDiagramType.YAML ? SName.yamlDiagram : SName.jsonDiagram;
|
if (skinParam.getUmlDiagramType() == UmlDiagramType.JSON)
|
||||||
|
return SName.jsonDiagram;
|
||||||
|
return SName.yamlDiagram;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Style getStyleArrow() {
|
private Style getStyleArrow() {
|
||||||
|
@ -41,6 +41,7 @@ import java.util.List;
|
|||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
import net.sourceforge.plantuml.command.Command;
|
import net.sourceforge.plantuml.command.Command;
|
||||||
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
||||||
|
import net.sourceforge.plantuml.command.CommonCommands;
|
||||||
import net.sourceforge.plantuml.core.DiagramType;
|
import net.sourceforge.plantuml.core.DiagramType;
|
||||||
import net.sourceforge.plantuml.core.UmlSource;
|
import net.sourceforge.plantuml.core.UmlSource;
|
||||||
|
|
||||||
@ -54,7 +55,7 @@ public class MindMapDiagramFactory extends PSystemCommandFactory {
|
|||||||
protected List<Command> createCommands() {
|
protected List<Command> createCommands() {
|
||||||
|
|
||||||
final List<Command> cmds = new ArrayList<>();
|
final List<Command> cmds = new ArrayList<>();
|
||||||
addCommonCommands1(cmds);
|
CommonCommands.addCommonCommands1(cmds);
|
||||||
// cmds.add(new CommandMindMapTabulation());
|
// cmds.add(new CommandMindMapTabulation());
|
||||||
cmds.add(new CommandMindMapOrgmode());
|
cmds.add(new CommandMindMapOrgmode());
|
||||||
cmds.add(new CommandMindMapOrgmodeMultiline());
|
cmds.add(new CommandMindMapOrgmodeMultiline());
|
||||||
|
@ -42,6 +42,7 @@ import net.sourceforge.plantuml.ISkinSimple;
|
|||||||
import net.sourceforge.plantuml.command.Command;
|
import net.sourceforge.plantuml.command.Command;
|
||||||
import net.sourceforge.plantuml.command.CommandFootboxIgnored;
|
import net.sourceforge.plantuml.command.CommandFootboxIgnored;
|
||||||
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
||||||
|
import net.sourceforge.plantuml.command.CommonCommands;
|
||||||
import net.sourceforge.plantuml.core.DiagramType;
|
import net.sourceforge.plantuml.core.DiagramType;
|
||||||
import net.sourceforge.plantuml.core.UmlSource;
|
import net.sourceforge.plantuml.core.UmlSource;
|
||||||
|
|
||||||
@ -60,7 +61,7 @@ public class NwDiagramFactory extends PSystemCommandFactory {
|
|||||||
protected List<Command> createCommands() {
|
protected List<Command> createCommands() {
|
||||||
|
|
||||||
final List<Command> cmds = new ArrayList<>();
|
final List<Command> cmds = new ArrayList<>();
|
||||||
addCommonCommands1(cmds);
|
CommonCommands.addCommonCommands1(cmds);
|
||||||
cmds.add(new CommandNwDiagInit());
|
cmds.add(new CommandNwDiagInit());
|
||||||
cmds.add(new CommandComment());
|
cmds.add(new CommandComment());
|
||||||
cmds.add(new CommandElement());
|
cmds.add(new CommandElement());
|
||||||
|
@ -44,6 +44,7 @@ import net.sourceforge.plantuml.ISkinSimple;
|
|||||||
import net.sourceforge.plantuml.command.Command;
|
import net.sourceforge.plantuml.command.Command;
|
||||||
import net.sourceforge.plantuml.command.CommandNope;
|
import net.sourceforge.plantuml.command.CommandNope;
|
||||||
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
||||||
|
import net.sourceforge.plantuml.command.CommonCommands;
|
||||||
import net.sourceforge.plantuml.core.DiagramType;
|
import net.sourceforge.plantuml.core.DiagramType;
|
||||||
import net.sourceforge.plantuml.core.UmlSource;
|
import net.sourceforge.plantuml.core.UmlSource;
|
||||||
import net.sourceforge.plantuml.project.command.CommandColorTask;
|
import net.sourceforge.plantuml.project.command.CommandColorTask;
|
||||||
@ -88,8 +89,8 @@ public class GanttDiagramFactory extends PSystemCommandFactory {
|
|||||||
@Override
|
@Override
|
||||||
protected List<Command> createCommands() {
|
protected List<Command> createCommands() {
|
||||||
final List<Command> cmds = new ArrayList<>();
|
final List<Command> cmds = new ArrayList<>();
|
||||||
addTitleCommands(cmds);
|
CommonCommands.addTitleCommands(cmds);
|
||||||
addCommonCommands2(cmds);
|
CommonCommands.addCommonCommands2(cmds);
|
||||||
|
|
||||||
cmds.add(new CommandStyleMultilinesCSS());
|
cmds.add(new CommandStyleMultilinesCSS());
|
||||||
cmds.add(new CommandStyleImport());
|
cmds.add(new CommandStyleImport());
|
||||||
|
@ -41,6 +41,7 @@ import java.util.List;
|
|||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
import net.sourceforge.plantuml.command.Command;
|
import net.sourceforge.plantuml.command.Command;
|
||||||
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
||||||
|
import net.sourceforge.plantuml.command.CommonCommands;
|
||||||
import net.sourceforge.plantuml.core.DiagramType;
|
import net.sourceforge.plantuml.core.DiagramType;
|
||||||
import net.sourceforge.plantuml.core.UmlSource;
|
import net.sourceforge.plantuml.core.UmlSource;
|
||||||
|
|
||||||
@ -57,8 +58,8 @@ public class PSystemSaltFactory2 extends PSystemCommandFactory {
|
|||||||
if (getDiagramType() == DiagramType.UML) {
|
if (getDiagramType() == DiagramType.UML) {
|
||||||
cmds.add(new CommandSalt());
|
cmds.add(new CommandSalt());
|
||||||
}
|
}
|
||||||
addCommonCommands2(cmds);
|
CommonCommands.addCommonCommands2(cmds);
|
||||||
addTitleCommands(cmds);
|
CommonCommands.addTitleCommands(cmds);
|
||||||
cmds.add(new CommandAnything());
|
cmds.add(new CommandAnything());
|
||||||
|
|
||||||
return cmds;
|
return cmds;
|
||||||
|
@ -41,6 +41,7 @@ import java.util.List;
|
|||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
import net.sourceforge.plantuml.command.Command;
|
import net.sourceforge.plantuml.command.Command;
|
||||||
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
||||||
|
import net.sourceforge.plantuml.command.CommonCommands;
|
||||||
import net.sourceforge.plantuml.command.note.sequence.FactorySequenceNoteAcrossCommand;
|
import net.sourceforge.plantuml.command.note.sequence.FactorySequenceNoteAcrossCommand;
|
||||||
import net.sourceforge.plantuml.command.note.sequence.FactorySequenceNoteCommand;
|
import net.sourceforge.plantuml.command.note.sequence.FactorySequenceNoteCommand;
|
||||||
import net.sourceforge.plantuml.command.note.sequence.FactorySequenceNoteOnArrowCommand;
|
import net.sourceforge.plantuml.command.note.sequence.FactorySequenceNoteOnArrowCommand;
|
||||||
@ -92,7 +93,7 @@ public class SequenceDiagramFactory extends PSystemCommandFactory {
|
|||||||
|
|
||||||
final List<Command> cmds = new ArrayList<>();
|
final List<Command> cmds = new ArrayList<>();
|
||||||
|
|
||||||
addCommonCommands1(cmds);
|
CommonCommands.addCommonCommands1(cmds);
|
||||||
cmds.add(new CommandHideUnlinked());
|
cmds.add(new CommandHideUnlinked());
|
||||||
|
|
||||||
cmds.add(new CommandActivate());
|
cmds.add(new CommandActivate());
|
||||||
|
@ -41,6 +41,7 @@ import java.util.List;
|
|||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
import net.sourceforge.plantuml.command.Command;
|
import net.sourceforge.plantuml.command.Command;
|
||||||
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
||||||
|
import net.sourceforge.plantuml.command.CommonCommands;
|
||||||
import net.sourceforge.plantuml.core.UmlSource;
|
import net.sourceforge.plantuml.core.UmlSource;
|
||||||
|
|
||||||
public class ListSpriteDiagramFactory extends PSystemCommandFactory {
|
public class ListSpriteDiagramFactory extends PSystemCommandFactory {
|
||||||
@ -49,8 +50,8 @@ public class ListSpriteDiagramFactory extends PSystemCommandFactory {
|
|||||||
protected List<Command> createCommands() {
|
protected List<Command> createCommands() {
|
||||||
|
|
||||||
final List<Command> cmds = new ArrayList<>();
|
final List<Command> cmds = new ArrayList<>();
|
||||||
addCommonCommands1(cmds);
|
CommonCommands.addCommonCommands1(cmds);
|
||||||
addCommonCommands2(cmds);
|
CommonCommands.addCommonCommands2(cmds);
|
||||||
cmds.add(new CommandListSprite());
|
cmds.add(new CommandListSprite());
|
||||||
return cmds;
|
return cmds;
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,7 @@ import net.sourceforge.plantuml.command.Command;
|
|||||||
import net.sourceforge.plantuml.command.CommandFootboxIgnored;
|
import net.sourceforge.plantuml.command.CommandFootboxIgnored;
|
||||||
import net.sourceforge.plantuml.command.CommandRankDir;
|
import net.sourceforge.plantuml.command.CommandRankDir;
|
||||||
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
||||||
|
import net.sourceforge.plantuml.command.CommonCommands;
|
||||||
import net.sourceforge.plantuml.command.note.CommandFactoryNote;
|
import net.sourceforge.plantuml.command.note.CommandFactoryNote;
|
||||||
import net.sourceforge.plantuml.command.note.CommandFactoryNoteOnEntity;
|
import net.sourceforge.plantuml.command.note.CommandFactoryNoteOnEntity;
|
||||||
import net.sourceforge.plantuml.command.note.CommandFactoryNoteOnLink;
|
import net.sourceforge.plantuml.command.note.CommandFactoryNoteOnLink;
|
||||||
@ -101,7 +102,7 @@ public class StateDiagramFactory extends PSystemCommandFactory {
|
|||||||
cmds.add(factoryNoteCommand.createSingleLine());
|
cmds.add(factoryNoteCommand.createSingleLine());
|
||||||
cmds.add(factoryNoteCommand.createMultiLine(false));
|
cmds.add(factoryNoteCommand.createMultiLine(false));
|
||||||
|
|
||||||
addCommonCommands1(cmds);
|
CommonCommands.addCommonCommands1(cmds);
|
||||||
cmds.add(new CommandHideShow2());
|
cmds.add(new CommandHideShow2());
|
||||||
cmds.add(new CommandNamespaceSeparator());
|
cmds.add(new CommandNamespaceSeparator());
|
||||||
|
|
||||||
|
@ -39,14 +39,18 @@ public enum PName {
|
|||||||
Shadowing, //
|
Shadowing, //
|
||||||
FontName, //
|
FontName, //
|
||||||
FontColor, //
|
FontColor, //
|
||||||
|
DARK_FontColor, //
|
||||||
FontSize, //
|
FontSize, //
|
||||||
FontStyle, //
|
FontStyle, //
|
||||||
BackGroundColor, //
|
BackGroundColor, //
|
||||||
|
DARK_BackGroundColor, //
|
||||||
RoundCorner, //
|
RoundCorner, //
|
||||||
LineThickness, //
|
LineThickness, //
|
||||||
DiagonalCorner, //
|
DiagonalCorner, //
|
||||||
HyperLinkColor, //
|
HyperLinkColor, //
|
||||||
|
DARK_HyperLinkColor, //
|
||||||
LineColor, //
|
LineColor, //
|
||||||
|
DARK_LineColor, //
|
||||||
LineStyle, //
|
LineStyle, //
|
||||||
Padding, //
|
Padding, //
|
||||||
Margin, //
|
Margin, //
|
||||||
@ -58,13 +62,30 @@ public enum PName {
|
|||||||
ShowStereotype, //
|
ShowStereotype, //
|
||||||
ImagePosition;
|
ImagePosition;
|
||||||
|
|
||||||
public static PName getFromName(String name) {
|
public static PName getFromName(String name, StyleScheme scheme) {
|
||||||
for (PName prop : values()) {
|
for (PName prop : values()) {
|
||||||
if (prop.name().equalsIgnoreCase(name)) {
|
if (prop.name().equalsIgnoreCase(name)) {
|
||||||
|
if (scheme == StyleScheme.DARK)
|
||||||
|
return dark(prop);
|
||||||
return prop;
|
return prop;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static PName dark(PName name) {
|
||||||
|
switch (name) {
|
||||||
|
case FontColor:
|
||||||
|
return DARK_FontColor;
|
||||||
|
case BackGroundColor:
|
||||||
|
return DARK_BackGroundColor;
|
||||||
|
case HyperLinkColor:
|
||||||
|
return DARK_HyperLinkColor;
|
||||||
|
case LineColor:
|
||||||
|
return DARK_LineColor;
|
||||||
|
default:
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -69,26 +69,25 @@ public class Style {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Style deltaPriority(int delta) {
|
public Style deltaPriority(int delta) {
|
||||||
if (signature.isStarred() == false) {
|
if (signature.isStarred() == false)
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
|
||||||
final EnumMap<PName, Value> copy = new EnumMap<PName, Value>(PName.class);
|
final EnumMap<PName, Value> copy = new EnumMap<PName, Value>(PName.class);
|
||||||
for (Entry<PName, Value> ent : this.map.entrySet()) {
|
for (Entry<PName, Value> ent : this.map.entrySet())
|
||||||
copy.put(ent.getKey(), new ValueDeltaPriority(ent.getValue(), delta));
|
copy.put(ent.getKey(), new ValueDeltaPriority(ent.getValue(), delta));
|
||||||
}
|
|
||||||
return new Style(this.signature, copy);
|
return new Style(this.signature, copy);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void printMe() {
|
public void printMe() {
|
||||||
if (map.size() == 0) {
|
if (map.size() == 0)
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
System.err.println(signature + " {");
|
System.err.println(signature + " {");
|
||||||
for (Entry<PName, Value> ent : map.entrySet()) {
|
for (Entry<PName, Value> ent : map.entrySet())
|
||||||
System.err.println(" " + ent.getKey() + ": " + ent.getValue().asString());
|
System.err.println(" " + ent.getKey() + ": " + ent.getValue().asString());
|
||||||
|
|
||||||
}
|
|
||||||
System.err.println("}");
|
System.err.println("}");
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -100,9 +99,16 @@ public class Style {
|
|||||||
|
|
||||||
public Value value(PName name) {
|
public Value value(PName name) {
|
||||||
final Value result = map.get(name);
|
final Value result = map.get(name);
|
||||||
if (result == null) {
|
if (result == null)
|
||||||
return ValueNull.NULL;
|
return ValueNull.NULL;
|
||||||
|
|
||||||
|
if (name == PName.BackGroundColor) {
|
||||||
|
final Value resultDark = map.get(PName.DARK_BackGroundColor);
|
||||||
|
if (resultDark != null)
|
||||||
|
return new ValueForDark(result, resultDark);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,41 +117,40 @@ public class Style {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Style mergeWith(Style other) {
|
public Style mergeWith(Style other) {
|
||||||
if (other == null) {
|
if (other == null)
|
||||||
return this;
|
return this;
|
||||||
}
|
|
||||||
final EnumMap<PName, Value> both = new EnumMap<PName, Value>(this.map);
|
final EnumMap<PName, Value> both = new EnumMap<PName, Value>(this.map);
|
||||||
for (Entry<PName, Value> ent : other.map.entrySet()) {
|
for (Entry<PName, Value> ent : other.map.entrySet()) {
|
||||||
final Value previous = this.map.get(ent.getKey());
|
final Value previous = this.map.get(ent.getKey());
|
||||||
if (previous == null || ent.getValue().getPriority() > previous.getPriority()) {
|
if (previous == null || ent.getValue().getPriority() > previous.getPriority())
|
||||||
both.put(ent.getKey(), ent.getValue());
|
both.put(ent.getKey(), ent.getValue());
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return new Style(this.signature.mergeWith(other.getSignature()), both);
|
return new Style(this.signature.mergeWith(other.getSignature()), both);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Style mergeIfUnknownWith(Style other) {
|
// private Style mergeIfUnknownWith(Style other) {
|
||||||
if (other == null) {
|
// if (other == null) {
|
||||||
return this;
|
// return this;
|
||||||
}
|
// }
|
||||||
final EnumMap<PName, Value> both = new EnumMap<PName, Value>(this.map);
|
// final EnumMap<PName, Value> both = new EnumMap<PName, Value>(this.map);
|
||||||
for (Entry<PName, Value> ent : other.map.entrySet()) {
|
// for (Entry<PName, Value> ent : other.map.entrySet()) {
|
||||||
final Value previous = this.map.get(ent.getKey());
|
// final Value previous = this.map.get(ent.getKey());
|
||||||
if (previous == null) {
|
// if (previous == null)
|
||||||
both.put(ent.getKey(), ent.getValue());
|
// both.put(ent.getKey(), ent.getValue());
|
||||||
}
|
//
|
||||||
}
|
// }
|
||||||
return new Style(this.signature.mergeWith(other.getSignature()), both);
|
// return new Style(this.signature.mergeWith(other.getSignature()), both, this.scheme);
|
||||||
}
|
// }
|
||||||
|
|
||||||
public Style eventuallyOverride(PName param, HColor color) {
|
public Style eventuallyOverride(PName param, HColor color) {
|
||||||
if (color == null) {
|
if (color == null)
|
||||||
return this;
|
return this;
|
||||||
}
|
|
||||||
final EnumMap<PName, Value> result = new EnumMap<PName, Value>(this.map);
|
final EnumMap<PName, Value> result = new EnumMap<PName, Value>(this.map);
|
||||||
final Value old = result.get(param);
|
final Value old = result.get(param);
|
||||||
result.put(param, new ValueColor(color, old.getPriority()));
|
result.put(param, new ValueColor(color, old.getPriority()));
|
||||||
// return new Style(kind, name + "-" + color, result);
|
|
||||||
return new Style(this.signature, result);
|
return new Style(this.signature, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,17 +168,17 @@ public class Style {
|
|||||||
Style result = this;
|
Style result = this;
|
||||||
if (colors != null) {
|
if (colors != null) {
|
||||||
final HColor back = colors.getColor(ColorType.BACK);
|
final HColor back = colors.getColor(ColorType.BACK);
|
||||||
if (back != null) {
|
if (back != null)
|
||||||
result = result.eventuallyOverride(PName.BackGroundColor, back);
|
result = result.eventuallyOverride(PName.BackGroundColor, back);
|
||||||
}
|
|
||||||
final HColor line = colors.getColor(ColorType.LINE);
|
final HColor line = colors.getColor(ColorType.LINE);
|
||||||
if (line != null) {
|
if (line != null)
|
||||||
result = result.eventuallyOverride(PName.LineColor, line);
|
result = result.eventuallyOverride(PName.LineColor, line);
|
||||||
}
|
|
||||||
final HColor text = colors.getColor(ColorType.TEXT);
|
final HColor text = colors.getColor(ColorType.TEXT);
|
||||||
if (text != null) {
|
if (text != null)
|
||||||
result = result.eventuallyOverride(PName.FontColor, text);
|
result = result.eventuallyOverride(PName.FontColor, text);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -182,9 +187,9 @@ public class Style {
|
|||||||
Style result = this;
|
Style result = this;
|
||||||
if (symbolContext != null) {
|
if (symbolContext != null) {
|
||||||
final HColor back = symbolContext.getBackColor();
|
final HColor back = symbolContext.getBackColor();
|
||||||
if (back != null) {
|
if (back != null)
|
||||||
result = result.eventuallyOverride(PName.BackGroundColor, back);
|
result = result.eventuallyOverride(PName.BackGroundColor, back);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -215,9 +220,9 @@ public class Style {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Style eventuallyOverride(UStroke stroke) {
|
public Style eventuallyOverride(UStroke stroke) {
|
||||||
if (stroke == null) {
|
if (stroke == null)
|
||||||
return this;
|
return this;
|
||||||
}
|
|
||||||
Style result = this.eventuallyOverride(PName.LineThickness, stroke.getThickness());
|
Style result = this.eventuallyOverride(PName.LineThickness, stroke.getThickness());
|
||||||
final double space = stroke.getDashSpace();
|
final double space = stroke.getDashSpace();
|
||||||
final double visible = stroke.getDashVisible();
|
final double visible = stroke.getDashVisible();
|
||||||
@ -228,16 +233,16 @@ public class Style {
|
|||||||
public UStroke getStroke() {
|
public UStroke getStroke() {
|
||||||
final double thickness = value(PName.LineThickness).asDouble();
|
final double thickness = value(PName.LineThickness).asDouble();
|
||||||
final String dash = value(PName.LineStyle).asString();
|
final String dash = value(PName.LineStyle).asString();
|
||||||
if (dash.length() == 0) {
|
if (dash.length() == 0)
|
||||||
return new UStroke(thickness);
|
return new UStroke(thickness);
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
final StringTokenizer st = new StringTokenizer(dash, "-;,");
|
final StringTokenizer st = new StringTokenizer(dash, "-;,");
|
||||||
final double dashVisible = Double.parseDouble(st.nextToken().trim());
|
final double dashVisible = Double.parseDouble(st.nextToken().trim());
|
||||||
double dashSpace = dashVisible;
|
double dashSpace = dashVisible;
|
||||||
if (st.hasMoreTokens()) {
|
if (st.hasMoreTokens())
|
||||||
dashSpace = Double.parseDouble(st.nextToken().trim());
|
dashSpace = Double.parseDouble(st.nextToken().trim());
|
||||||
}
|
|
||||||
return new UStroke(dashVisible, dashSpace, thickness);
|
return new UStroke(dashVisible, dashSpace, thickness);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return new UStroke(thickness);
|
return new UStroke(thickness);
|
||||||
@ -246,9 +251,9 @@ public class Style {
|
|||||||
|
|
||||||
public UStroke getStroke(Colors colors) {
|
public UStroke getStroke(Colors colors) {
|
||||||
final UStroke stroke = colors.getSpecificLineStroke();
|
final UStroke stroke = colors.getSpecificLineStroke();
|
||||||
if (stroke == null) {
|
if (stroke == null)
|
||||||
return getStroke();
|
return getStroke();
|
||||||
}
|
|
||||||
return stroke;
|
return stroke;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -294,11 +299,11 @@ public class Style {
|
|||||||
|
|
||||||
public UGraphic applyStrokeAndLineColor(UGraphic ug, HColorSet colorSet, ThemeStyle themeStyle) {
|
public UGraphic applyStrokeAndLineColor(UGraphic ug, HColorSet colorSet, ThemeStyle themeStyle) {
|
||||||
final HColor color = value(PName.LineColor).asColor(themeStyle, colorSet);
|
final HColor color = value(PName.LineColor).asColor(themeStyle, colorSet);
|
||||||
if (color == null) {
|
if (color == null)
|
||||||
ug = ug.apply(new HColorNone());
|
ug = ug.apply(new HColorNone());
|
||||||
} else {
|
else
|
||||||
ug = ug.apply(color);
|
ug = ug.apply(color);
|
||||||
}
|
|
||||||
ug = ug.apply(getStroke());
|
ug = ug.apply(getStroke());
|
||||||
return ug;
|
return ug;
|
||||||
}
|
}
|
||||||
|
@ -53,9 +53,9 @@ public class StyleBuilder implements AutomaticCounter {
|
|||||||
private int counter;
|
private int counter;
|
||||||
|
|
||||||
public void printMe() {
|
public void printMe() {
|
||||||
for (Entry<StyleSignature, Style> ent : styles.entrySet()) {
|
for (Entry<StyleSignature, Style> ent : styles.entrySet())
|
||||||
ent.getValue().printMe();
|
ent.getValue().printMe();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private StyleBuilder(SkinParam skinParam, Set<StyleSignature> printedForLog) {
|
private StyleBuilder(SkinParam skinParam, Set<StyleSignature> printedForLog) {
|
||||||
@ -72,15 +72,15 @@ public class StyleBuilder implements AutomaticCounter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Style createStyle(String name) {
|
public Style createStyle(String name) {
|
||||||
if (name.contains("*")) {
|
if (name.contains("*"))
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
}
|
|
||||||
name = name.toLowerCase();
|
name = name.toLowerCase();
|
||||||
final StyleSignature signature = new StyleSignature(name);
|
final StyleSignature signature = new StyleSignature(name);
|
||||||
final Style result = styles.get(signature);
|
final Style result = styles.get(signature);
|
||||||
if (result == null) {
|
if (result == null)
|
||||||
return new Style(signature, new EnumMap<PName, Value>(PName.class));
|
return new Style(signature, new EnumMap<PName, Value>(PName.class));
|
||||||
}
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,9 +101,9 @@ public class StyleBuilder implements AutomaticCounter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void loadInternal(StyleSignature styleName, Style newStyle) {
|
public void loadInternal(StyleSignature styleName, Style newStyle) {
|
||||||
if (styleName.isStarred()) {
|
if (styleName.isStarred())
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
}
|
|
||||||
this.styles.put(styleName, newStyle);
|
this.styles.put(styleName, newStyle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,20 +113,19 @@ public class StyleBuilder implements AutomaticCounter {
|
|||||||
|
|
||||||
public Style getMergedStyle(StyleSignature signature) {
|
public Style getMergedStyle(StyleSignature signature) {
|
||||||
boolean added = this.printedForLog.add(signature);
|
boolean added = this.printedForLog.add(signature);
|
||||||
if (added) {
|
if (added)
|
||||||
Log.info("Using style " + signature);
|
Log.info("Using style " + signature);
|
||||||
}
|
|
||||||
Style result = null;
|
Style result = null;
|
||||||
for (Entry<StyleSignature, Style> ent : styles.entrySet()) {
|
for (Entry<StyleSignature, Style> ent : styles.entrySet()) {
|
||||||
final StyleSignature key = ent.getKey();
|
final StyleSignature key = ent.getKey();
|
||||||
if (key.matchAll(signature) == false) {
|
if (key.matchAll(signature) == false)
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if (result == null) {
|
if (result == null)
|
||||||
result = ent.getValue();
|
result = ent.getValue();
|
||||||
} else {
|
else
|
||||||
result = result.mergeWith(ent.getValue());
|
result = result.mergeWith(ent.getValue());
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@ -134,24 +133,23 @@ public class StyleBuilder implements AutomaticCounter {
|
|||||||
|
|
||||||
public Style getMergedStyleSpecial(StyleSignature signature, int deltaPriority) {
|
public Style getMergedStyleSpecial(StyleSignature signature, int deltaPriority) {
|
||||||
boolean added = this.printedForLog.add(signature);
|
boolean added = this.printedForLog.add(signature);
|
||||||
if (added) {
|
if (added)
|
||||||
Log.info("Using style " + signature);
|
Log.info("Using style " + signature);
|
||||||
}
|
|
||||||
Style result = null;
|
Style result = null;
|
||||||
for (Entry<StyleSignature, Style> ent : styles.entrySet()) {
|
for (Entry<StyleSignature, Style> ent : styles.entrySet()) {
|
||||||
final StyleSignature key = ent.getKey();
|
final StyleSignature key = ent.getKey();
|
||||||
if (key.matchAll(signature) == false) {
|
if (key.matchAll(signature) == false)
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
Style tmp = ent.getValue();
|
Style tmp = ent.getValue();
|
||||||
if (key.isStarred()) {
|
if (key.isStarred())
|
||||||
tmp = tmp.deltaPriority(deltaPriority);
|
tmp = tmp.deltaPriority(deltaPriority);
|
||||||
}
|
|
||||||
if (result == null) {
|
if (result == null)
|
||||||
result = tmp;
|
result = tmp;
|
||||||
} else {
|
else
|
||||||
result = result.mergeWith(tmp);
|
result = result.mergeWith(tmp);
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -71,9 +71,9 @@ public class StyleLoader {
|
|||||||
InputStream internalIs = null;
|
InputStream internalIs = null;
|
||||||
SFile localFile = new SFile(filename);
|
SFile localFile = new SFile(filename);
|
||||||
Log.info("Trying to load style " + filename);
|
Log.info("Trying to load style " + filename);
|
||||||
if (localFile.exists() == false) {
|
if (localFile.exists() == false)
|
||||||
localFile = FileSystem.getInstance().getFile(filename);
|
localFile = FileSystem.getInstance().getFile(filename);
|
||||||
}
|
|
||||||
if (localFile.exists()) {
|
if (localFile.exists()) {
|
||||||
Log.info("File found : " + localFile.getPrintablePath());
|
Log.info("File found : " + localFile.getPrintablePath());
|
||||||
internalIs = localFile.openFile();
|
internalIs = localFile.openFile();
|
||||||
@ -99,9 +99,9 @@ public class StyleLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void loadSkinInternal(final BlocLines lines) {
|
private void loadSkinInternal(final BlocLines lines) {
|
||||||
for (Style newStyle : getDeclaredStyles(lines, styleBuilder)) {
|
for (Style newStyle : getDeclaredStyles(lines, styleBuilder))
|
||||||
this.styleBuilder.loadInternal(newStyle.getSignature(), newStyle);
|
this.styleBuilder.loadInternal(newStyle.getSignature(), newStyle);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private final static String KEYNAMES = "[\\w(), ]+?";
|
private final static String KEYNAMES = "[\\w(), ]+?";
|
||||||
@ -112,6 +112,7 @@ public class StyleLoader {
|
|||||||
public static Collection<Style> getDeclaredStyles(BlocLines lines, AutomaticCounter counter) {
|
public static Collection<Style> getDeclaredStyles(BlocLines lines, AutomaticCounter counter) {
|
||||||
lines = lines.eventuallyMoveAllEmptyBracket();
|
lines = lines.eventuallyMoveAllEmptyBracket();
|
||||||
final List<Style> result = new ArrayList<>();
|
final List<Style> result = new ArrayList<>();
|
||||||
|
StyleScheme scheme = StyleScheme.REGULAR;
|
||||||
|
|
||||||
Context context = new Context();
|
Context context = new Context();
|
||||||
final List<Map<PName, Value>> maps = new ArrayList<Map<PName, Value>>();
|
final List<Map<PName, Value>> maps = new ArrayList<Map<PName, Value>>();
|
||||||
@ -134,28 +135,33 @@ public class StyleLoader {
|
|||||||
if (inComment)
|
if (inComment)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
final int x = trimmed.lastIndexOf("//");
|
if (trimmed.matches("@media.*dark.*\\{")) {
|
||||||
if (x != -1) {
|
scheme = StyleScheme.DARK;
|
||||||
trimmed = trimmed.substring(0, x).trim();
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final int x = trimmed.lastIndexOf("//");
|
||||||
|
if (x != -1)
|
||||||
|
trimmed = trimmed.substring(0, x).trim();
|
||||||
|
|
||||||
final Matcher2 mKeyNames = keyName.matcher(trimmed);
|
final Matcher2 mKeyNames = keyName.matcher(trimmed);
|
||||||
if (mKeyNames.find()) {
|
if (mKeyNames.find()) {
|
||||||
String names = mKeyNames.group(1).replace(" ", "");
|
String names = mKeyNames.group(1).replace(" ", "");
|
||||||
final boolean isRecurse = mKeyNames.group(2) != null;
|
final boolean isRecurse = mKeyNames.group(2) != null;
|
||||||
if (isRecurse) {
|
if (isRecurse)
|
||||||
names += "*";
|
names += "*";
|
||||||
}
|
|
||||||
context = context.push(names);
|
context = context.push(names);
|
||||||
maps.add(new EnumMap<PName, Value>(PName.class));
|
maps.add(new EnumMap<PName, Value>(PName.class));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
final Matcher2 mPropertyAndValue = propertyAndValue.matcher(trimmed);
|
final Matcher2 mPropertyAndValue = propertyAndValue.matcher(trimmed);
|
||||||
if (mPropertyAndValue.find()) {
|
if (mPropertyAndValue.find()) {
|
||||||
final PName key = PName.getFromName(mPropertyAndValue.group(1));
|
final PName key = PName.getFromName(mPropertyAndValue.group(1), scheme);
|
||||||
final String value = mPropertyAndValue.group(2);
|
final String value = mPropertyAndValue.group(2);
|
||||||
if (key != null && maps.size() > 0) {
|
if (key != null && maps.size() > 0)
|
||||||
maps.get(maps.size() - 1).put(key, new ValueImpl(value, counter));
|
maps.get(maps.size() - 1).put(key, new ValueImpl(value, counter));
|
||||||
}
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
final Matcher2 mCloseBracket = closeBracket.matcher(trimmed);
|
final Matcher2 mCloseBracket = closeBracket.matcher(trimmed);
|
||||||
@ -168,6 +174,8 @@ public class StyleLoader {
|
|||||||
}
|
}
|
||||||
context = context.pop();
|
context = context.pop();
|
||||||
maps.remove(maps.size() - 1);
|
maps.remove(maps.size() - 1);
|
||||||
|
} else {
|
||||||
|
scheme = StyleScheme.REGULAR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
42
src/net/sourceforge/plantuml/style/StyleScheme.java
Normal file
42
src/net/sourceforge/plantuml/style/StyleScheme.java
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* 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.style;
|
||||||
|
|
||||||
|
public enum StyleScheme {
|
||||||
|
|
||||||
|
REGULAR, DARK
|
||||||
|
|
||||||
|
}
|
@ -51,9 +51,9 @@ public class StyleSignature {
|
|||||||
private final Set<String> names = new LinkedHashSet<>();
|
private final Set<String> names = new LinkedHashSet<>();
|
||||||
|
|
||||||
public StyleSignature(String s) {
|
public StyleSignature(String s) {
|
||||||
if (s.contains("*") || s.contains("&") || s.contains("-")) {
|
if (s.contains("*") || s.contains("&") || s.contains("-"))
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
}
|
|
||||||
this.names.add(clean(s));
|
this.names.add(clean(s));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,9 +69,9 @@ public class StyleSignature {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public StyleSignature addClickable(Url url) {
|
public StyleSignature addClickable(Url url) {
|
||||||
if (url == null) {
|
if (url == null)
|
||||||
return this;
|
return this;
|
||||||
}
|
|
||||||
final Set<String> result = new LinkedHashSet<>(names);
|
final Set<String> result = new LinkedHashSet<>(names);
|
||||||
result.add(SName.clickable.name());
|
result.add(SName.clickable.name());
|
||||||
return new StyleSignature(result);
|
return new StyleSignature(result);
|
||||||
@ -79,12 +79,12 @@ public class StyleSignature {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public StyleSignature add(String s) {
|
public StyleSignature add(String s) {
|
||||||
if (s == null) {
|
if (s == null)
|
||||||
return this;
|
return this;
|
||||||
}
|
|
||||||
if (s.contains("*") || s.contains("&") || s.contains("-")) {
|
if (s.contains("*") || s.contains("&") || s.contains("-"))
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
}
|
|
||||||
final Set<String> result = new LinkedHashSet<>(names);
|
final Set<String> result = new LinkedHashSet<>(names);
|
||||||
result.add(clean(s));
|
result.add(clean(s));
|
||||||
return new StyleSignature(result);
|
return new StyleSignature(result);
|
||||||
@ -119,25 +119,25 @@ public class StyleSignature {
|
|||||||
public String toString() {
|
public String toString() {
|
||||||
final StringBuilder result = new StringBuilder();
|
final StringBuilder result = new StringBuilder();
|
||||||
for (String n : names) {
|
for (String n : names) {
|
||||||
if (result.length() > 0) {
|
if (result.length() > 0)
|
||||||
result.append('.');
|
result.append('.');
|
||||||
}
|
|
||||||
result.append(n);
|
result.append(n);
|
||||||
}
|
}
|
||||||
return result.toString();
|
return result.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean matchAll(StyleSignature other) {
|
public boolean matchAll(StyleSignature other) {
|
||||||
if (other.isStarred() && names.contains("*") == false) {
|
if (other.isStarred() && names.contains("*") == false)
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
for (String token : names) {
|
for (String token : names) {
|
||||||
if (token.equals("*")) {
|
if (token.equals("*"))
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if (other.names.contains(token) == false) {
|
if (other.names.contains(token) == false)
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -148,30 +148,28 @@ public class StyleSignature {
|
|||||||
|
|
||||||
public static StyleSignature of(SName... names) {
|
public static StyleSignature of(SName... names) {
|
||||||
final List<String> result = new ArrayList<>();
|
final List<String> result = new ArrayList<>();
|
||||||
for (SName name : names) {
|
for (SName name : names)
|
||||||
result.add(name.name().toLowerCase().replace("_", ""));
|
result.add(name.name().toLowerCase().replace("_", ""));
|
||||||
}
|
|
||||||
return new StyleSignature(result);
|
return new StyleSignature(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public StyleSignature forStereotypeItself(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())
|
||||||
result.add(clean(name));
|
result.add(clean(name));
|
||||||
}
|
|
||||||
}
|
|
||||||
result.add(SName.stereotype.name().toLowerCase().replace("_", ""));
|
result.add(SName.stereotype.name().toLowerCase().replace("_", ""));
|
||||||
return new StyleSignature(result);
|
return new StyleSignature(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public StyleSignature with(Stereotype stereotype) {
|
public StyleSignature with(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())
|
||||||
result.add(clean(name));
|
result.add(clean(name));
|
||||||
}
|
|
||||||
}
|
|
||||||
return new StyleSignature(result);
|
return new StyleSignature(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,9 +177,9 @@ public class StyleSignature {
|
|||||||
if (stereostyles.isEmpty())
|
if (stereostyles.isEmpty())
|
||||||
return this;
|
return this;
|
||||||
final List<String> result = new ArrayList<>(names);
|
final List<String> result = new ArrayList<>(names);
|
||||||
for (String name : stereostyles.getStyleNames()) {
|
for (String name : stereostyles.getStyleNames())
|
||||||
result.add(clean(name));
|
result.add(clean(name));
|
||||||
}
|
|
||||||
return new StyleSignature(result);
|
return new StyleSignature(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,11 +189,10 @@ public class StyleSignature {
|
|||||||
|
|
||||||
public StyleSignature mergeWith(List<Style> others) {
|
public StyleSignature mergeWith(List<Style> others) {
|
||||||
final List<String> copy = new ArrayList<>(names);
|
final List<String> copy = new ArrayList<>(names);
|
||||||
for (Style other : others) {
|
for (Style other : others)
|
||||||
for (String s : other.getSignature().getNames()) {
|
for (String s : other.getSignature().getNames())
|
||||||
copy.add(s);
|
copy.add(s);
|
||||||
}
|
|
||||||
}
|
|
||||||
return new StyleSignature(copy);
|
return new StyleSignature(copy);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,17 +203,17 @@ public class StyleSignature {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Style getMergedStyle(StyleBuilder styleBuilder) {
|
public Style getMergedStyle(StyleBuilder styleBuilder) {
|
||||||
if (styleBuilder == null) {
|
if (styleBuilder == null)
|
||||||
return null;
|
return null;
|
||||||
}
|
|
||||||
return styleBuilder.getMergedStyle(this);
|
return styleBuilder.getMergedStyle(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean match(Stereotype stereotype) {
|
public boolean match(Stereotype stereotype) {
|
||||||
for (String s : stereotype.getMultipleLabels()) {
|
for (String s : stereotype.getMultipleLabels()) {
|
||||||
if (names.contains(clean(s))) {
|
if (names.contains(clean(s)))
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
97
src/net/sourceforge/plantuml/style/ValueForDark.java
Normal file
97
src/net/sourceforge/plantuml/style/ValueForDark.java
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* 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.style;
|
||||||
|
|
||||||
|
import net.sourceforge.plantuml.ThemeStyle;
|
||||||
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
|
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||||
|
import net.sourceforge.plantuml.ugraphic.color.HColorSet;
|
||||||
|
import net.sourceforge.plantuml.ugraphic.color.HColorSimple;
|
||||||
|
|
||||||
|
public class ValueForDark implements Value {
|
||||||
|
|
||||||
|
private final Value regular;
|
||||||
|
private final Value dark;
|
||||||
|
|
||||||
|
public ValueForDark(Value regular, Value dark) {
|
||||||
|
this.regular = regular;
|
||||||
|
this.dark = dark;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String asString() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HColor asColor(ThemeStyle themeStyle, HColorSet set) {
|
||||||
|
final HColor result = regular.asColor(themeStyle, set);
|
||||||
|
if (result instanceof HColorSimple)
|
||||||
|
return ((HColorSimple) result).withDark(dark.asColor(themeStyle, set));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int asInt() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double asDouble() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean asBoolean() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int asFontStyle() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HorizontalAlignment asHorizontalAlignment() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPriority() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -47,7 +47,7 @@ import net.sourceforge.plantuml.ugraphic.UGraphic;
|
|||||||
import net.sourceforge.plantuml.ugraphic.UTranslate;
|
import net.sourceforge.plantuml.ugraphic.UTranslate;
|
||||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||||
|
|
||||||
public class EntityImageProtected extends AbstractTextBlock implements IEntityImage, Untranslated {
|
public class EntityImageProtected extends AbstractTextBlock implements IEntityImage, Untranslated, WithPorts {
|
||||||
|
|
||||||
private final IEntityImage orig;
|
private final IEntityImage orig;
|
||||||
private final double border;
|
private final double border;
|
||||||
@ -100,4 +100,9 @@ public class EntityImageProtected extends AbstractTextBlock implements IEntityIm
|
|||||||
return orig.getOverscanX(stringBounder);
|
return orig.getOverscanX(stringBounder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Ports getPorts(StringBounder stringBounder) {
|
||||||
|
return ((WithPorts) orig).getPorts(stringBounder);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -44,7 +44,9 @@ import java.io.InputStream;
|
|||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -107,6 +109,8 @@ public class SvgGraphics {
|
|||||||
final private Element gRoot;
|
final private Element gRoot;
|
||||||
|
|
||||||
private String fill = "black";
|
private String fill = "black";
|
||||||
|
private String fillDark = "black";
|
||||||
|
private Collection<String> classesForDarkness = new LinkedHashSet<>();
|
||||||
private String stroke = "black";
|
private String stroke = "black";
|
||||||
private String strokeWidth;
|
private String strokeWidth;
|
||||||
private String strokeDasharray = null;
|
private String strokeDasharray = null;
|
||||||
@ -156,19 +160,17 @@ public class SvgGraphics {
|
|||||||
this.filterUid = "b" + getSeed(seed);
|
this.filterUid = "b" + getSeed(seed);
|
||||||
this.shadowId = "f" + getSeed(seed);
|
this.shadowId = "f" + getSeed(seed);
|
||||||
this.gradientId = "g" + getSeed(seed);
|
this.gradientId = "g" + getSeed(seed);
|
||||||
if (hover != null) {
|
if (hover != null)
|
||||||
defs.appendChild(getPathHover(hover));
|
defs.appendChild(getPathHover(hover));
|
||||||
}
|
|
||||||
|
|
||||||
if (INTERACTIVE) {
|
if (INTERACTIVE) {
|
||||||
final Element styles = getStylesForInteractiveMode();
|
final Element styles = getStylesForInteractiveMode();
|
||||||
if (styles != null) {
|
if (styles != null)
|
||||||
defs.appendChild(styles);
|
defs.appendChild(styles);
|
||||||
}
|
|
||||||
final Element script = getScriptForInteractiveMode();
|
final Element script = getScriptForInteractiveMode();
|
||||||
if (script != null) {
|
if (script != null)
|
||||||
defs.appendChild(script);
|
defs.appendChild(script);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch (ParserConfigurationException e) {
|
} catch (ParserConfigurationException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -179,21 +181,42 @@ public class SvgGraphics {
|
|||||||
private Element getStylesForInteractiveMode() {
|
private Element getStylesForInteractiveMode() {
|
||||||
final Element style = simpleElement("style");
|
final Element style = simpleElement("style");
|
||||||
final String text = getData("default.css");
|
final String text = getData("default.css");
|
||||||
if (text == null) {
|
if (text == null)
|
||||||
return null;
|
return null;
|
||||||
}
|
|
||||||
final CDATASection cdata = document.createCDATASection(text);
|
final CDATASection cdata = document.createCDATASection(text);
|
||||||
style.setAttribute("type", "text/css");
|
style.setAttribute("type", "text/css");
|
||||||
style.appendChild(cdata);
|
style.appendChild(cdata);
|
||||||
return style;
|
return style;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Element getStylesForDarkness() {
|
||||||
|
final Element style = simpleElement("style");
|
||||||
|
final StringBuilder text1 = new StringBuilder();
|
||||||
|
final StringBuilder text2 = new StringBuilder("@media (prefers-color-scheme:dark) {");
|
||||||
|
final Pattern p = Pattern.compile("^(\\w)_(\\w+)_(\\w+)$");
|
||||||
|
for (String s : this.classesForDarkness) {
|
||||||
|
final Matcher m = p.matcher(s);
|
||||||
|
if (m.matches() == false)
|
||||||
|
throw new IllegalStateException();
|
||||||
|
final String color1 = m.group(2);
|
||||||
|
final String color2 = m.group(3);
|
||||||
|
text1.append("*." + s + " {fill:#" + color1 + ";}");
|
||||||
|
text2.append("*." + s + " {fill:#" + color2 + ";}");
|
||||||
|
}
|
||||||
|
text2.append("}");
|
||||||
|
final CDATASection cdata = document.createCDATASection(text1.toString() + text2.toString());
|
||||||
|
style.setAttribute("type", "text/css");
|
||||||
|
style.appendChild(cdata);
|
||||||
|
return style;
|
||||||
|
}
|
||||||
|
|
||||||
private Element getScriptForInteractiveMode() {
|
private Element getScriptForInteractiveMode() {
|
||||||
final Element script = document.createElement("script");
|
final Element script = document.createElement("script");
|
||||||
final String text = getData("default.js");
|
final String text = getData("default.js");
|
||||||
if (text == null) {
|
if (text == null)
|
||||||
return null;
|
return null;
|
||||||
}
|
|
||||||
script.setTextContent(text);
|
script.setTextContent(text);
|
||||||
return script;
|
return script;
|
||||||
}
|
}
|
||||||
@ -343,6 +366,12 @@ public class SvgGraphics {
|
|||||||
|
|
||||||
public final void setFillColor(String fill) {
|
public final void setFillColor(String fill) {
|
||||||
this.fill = fill == null ? "none" : fill;
|
this.fill = fill == null ? "none" : fill;
|
||||||
|
this.fillDark = this.fill;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final void setFillColor(String fill, String fillDark) {
|
||||||
|
this.fill = fill == null ? "none" : fill;
|
||||||
|
this.fillDark = fillDark == null ? "none" : fillDark;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void setStrokeColor(String stroke) {
|
public final void setStrokeColor(String stroke) {
|
||||||
@ -357,9 +386,9 @@ public class SvgGraphics {
|
|||||||
private final List<Element> pendingAction = new ArrayList<>();
|
private final List<Element> pendingAction = new ArrayList<>();
|
||||||
|
|
||||||
public final Element getG() {
|
public final Element getG() {
|
||||||
if (pendingAction.size() == 0) {
|
if (pendingAction.size() == 0)
|
||||||
return gRoot;
|
return gRoot;
|
||||||
}
|
|
||||||
return pendingAction.get(0);
|
return pendingAction.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -378,12 +407,12 @@ public class SvgGraphics {
|
|||||||
elt.setAttribute("rx", format(rx));
|
elt.setAttribute("rx", format(rx));
|
||||||
elt.setAttribute("ry", format(ry));
|
elt.setAttribute("ry", format(ry));
|
||||||
}
|
}
|
||||||
if (id != null) {
|
if (id != null)
|
||||||
elt.setAttribute("id", id);
|
elt.setAttribute("id", id);
|
||||||
}
|
|
||||||
if (codeLine != null) {
|
if (codeLine != null)
|
||||||
elt.setAttribute("codeLine", codeLine);
|
elt.setAttribute("codeLine", codeLine);
|
||||||
}
|
|
||||||
getG().appendChild(elt);
|
getG().appendChild(elt);
|
||||||
}
|
}
|
||||||
ensureVisible(x + width + 2 * deltaShadow, y + height + 2 * deltaShadow);
|
ensureVisible(x + width + 2 * deltaShadow, y + height + 2 * deltaShadow);
|
||||||
@ -420,12 +449,12 @@ public class SvgGraphics {
|
|||||||
final StringBuilder style = new StringBuilder();
|
final StringBuilder style = new StringBuilder();
|
||||||
style.append("stroke:" + stroke + ";");
|
style.append("stroke:" + stroke + ";");
|
||||||
style.append("stroke-width:" + strokeWidth + ";");
|
style.append("stroke-width:" + strokeWidth + ";");
|
||||||
if (fill.equals("#00000000")) {
|
if (fill.equals("#00000000"))
|
||||||
style.append("fill:none;");
|
style.append("fill:none;");
|
||||||
}
|
|
||||||
if (strokeDasharray != null) {
|
if (strokeDasharray != null)
|
||||||
style.append("stroke-dasharray:" + strokeDasharray + ";");
|
style.append("stroke-dasharray:" + strokeDasharray + ";");
|
||||||
}
|
|
||||||
return style.toString();
|
return style.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -434,12 +463,12 @@ public class SvgGraphics {
|
|||||||
final StringBuilder style = new StringBuilder();
|
final StringBuilder style = new StringBuilder();
|
||||||
style.append("stroke:" + stroke + ";");
|
style.append("stroke:" + stroke + ";");
|
||||||
style.append("stroke-width:" + strokeWidth + ";");
|
style.append("stroke-width:" + strokeWidth + ";");
|
||||||
if (fill.equals("#00000000")) {
|
if (fill.equals("#00000000"))
|
||||||
style.append("fill:none;");
|
style.append("fill:none;");
|
||||||
}
|
|
||||||
if (strokeDasharray != null) {
|
if (strokeDasharray != null)
|
||||||
style.append("stroke-dasharray:" + strokeDasharray + ";");
|
style.append("stroke-dasharray:" + strokeDasharray + ";");
|
||||||
}
|
|
||||||
return style.toString();
|
return style.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -450,9 +479,9 @@ public class SvgGraphics {
|
|||||||
final Element elt = (Element) document.createElement("polygon");
|
final Element elt = (Element) document.createElement("polygon");
|
||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
for (double coord : points) {
|
for (double coord : points) {
|
||||||
if (sb.length() > 0) {
|
if (sb.length() > 0)
|
||||||
sb.append(",");
|
sb.append(",");
|
||||||
}
|
|
||||||
sb.append(format(coord));
|
sb.append(format(coord));
|
||||||
}
|
}
|
||||||
elt.setAttribute("points", sb.toString());
|
elt.setAttribute("points", sb.toString());
|
||||||
@ -489,15 +518,15 @@ public class SvgGraphics {
|
|||||||
elt.setAttribute("textLength", format(textLength));
|
elt.setAttribute("textLength", format(textLength));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fontWeight != null) {
|
if (fontWeight != null)
|
||||||
elt.setAttribute("font-weight", fontWeight);
|
elt.setAttribute("font-weight", fontWeight);
|
||||||
}
|
|
||||||
if (fontStyle != null) {
|
if (fontStyle != null)
|
||||||
elt.setAttribute("font-style", fontStyle);
|
elt.setAttribute("font-style", fontStyle);
|
||||||
}
|
|
||||||
if (textDecoration != null) {
|
if (textDecoration != null)
|
||||||
elt.setAttribute("text-decoration", textDecoration);
|
elt.setAttribute("text-decoration", textDecoration);
|
||||||
}
|
|
||||||
if (fontFamily != null) {
|
if (fontFamily != null) {
|
||||||
// http://plantuml.sourceforge.net/qa/?qa=5432/svg-monospace-output-has-wrong-font-family
|
// http://plantuml.sourceforge.net/qa/?qa=5432/svg-monospace-output-has-wrong-font-family
|
||||||
if ("monospaced".equalsIgnoreCase(fontFamily)) {
|
if ("monospaced".equalsIgnoreCase(fontFamily)) {
|
||||||
@ -513,9 +542,9 @@ public class SvgGraphics {
|
|||||||
final String backFilterId = getFilterBackColor(textBackColor);
|
final String backFilterId = getFilterBackColor(textBackColor);
|
||||||
elt.setAttribute("filter", "url(#" + backFilterId + ")");
|
elt.setAttribute("filter", "url(#" + backFilterId + ")");
|
||||||
}
|
}
|
||||||
for (Map.Entry<String, String> ent : attributes.entrySet()) {
|
for (Map.Entry<String, String> ent : attributes.entrySet())
|
||||||
elt.setAttribute(ent.getKey(), ent.getValue());
|
elt.setAttribute(ent.getKey(), ent.getValue());
|
||||||
}
|
|
||||||
elt.setTextContent(text);
|
elt.setTextContent(text);
|
||||||
getG().appendChild(elt);
|
getG().appendChild(elt);
|
||||||
|
|
||||||
@ -549,9 +578,9 @@ public class SvgGraphics {
|
|||||||
|
|
||||||
private String getFilterBackColor(String color) {
|
private String getFilterBackColor(String color) {
|
||||||
String id = filterBackColor.get(color);
|
String id = filterBackColor.get(color);
|
||||||
if (id != null) {
|
if (id != null)
|
||||||
return id;
|
return id;
|
||||||
}
|
|
||||||
id = getIdFilterBackColor(color);
|
id = getIdFilterBackColor(color);
|
||||||
final Element filter = (Element) document.createElement("filter");
|
final Element filter = (Element) document.createElement("filter");
|
||||||
filter.setAttribute("id", id);
|
filter.setAttribute("id", id);
|
||||||
@ -600,10 +629,8 @@ public class SvgGraphics {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void createXmlInternal(OutputStream os) throws TransformerException {
|
private void createXmlInternal(OutputStream os) throws TransformerException {
|
||||||
// // Add lines
|
if (this.classesForDarkness.size() > 0)
|
||||||
// for (Line l : lines) {
|
defs.appendChild(getStylesForDarkness());
|
||||||
// l.drawNow();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Get a DOMSource object that represents the
|
// Get a DOMSource object that represents the
|
||||||
// Document object
|
// Document object
|
||||||
@ -612,9 +639,9 @@ public class SvgGraphics {
|
|||||||
final int maxXscaled = (int) (maxX * scale);
|
final int maxXscaled = (int) (maxX * scale);
|
||||||
final int maxYscaled = (int) (maxY * scale);
|
final int maxYscaled = (int) (maxY * scale);
|
||||||
String style = "width:" + maxXscaled + "px;height:" + maxYscaled + "px;";
|
String style = "width:" + maxXscaled + "px;height:" + maxYscaled + "px;";
|
||||||
if (backcolor != null) {
|
if (backcolor != null)
|
||||||
style += "background:" + backcolor + ";";
|
style += "background:" + backcolor + ";";
|
||||||
}
|
|
||||||
if (svgDimensionStyle) {
|
if (svgDimensionStyle) {
|
||||||
root.setAttribute("style", style);
|
root.setAttribute("style", style);
|
||||||
root.setAttribute("width", format(maxX) + "px");
|
root.setAttribute("width", format(maxX) + "px");
|
||||||
@ -629,7 +656,6 @@ public class SvgGraphics {
|
|||||||
if (pendingBackground != null) {
|
if (pendingBackground != null) {
|
||||||
pendingBackground.setAttribute("width", format(maxX));
|
pendingBackground.setAttribute("width", format(maxX));
|
||||||
pendingBackground.setAttribute("height", format(maxY));
|
pendingBackground.setAttribute("height", format(maxY));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get a StreamResult object that points to the
|
// Get a StreamResult object that points to the
|
||||||
@ -682,22 +708,34 @@ public class SvgGraphics {
|
|||||||
elt.setAttribute("style", getStyle());
|
elt.setAttribute("style", getStyle());
|
||||||
fillMe(elt);
|
fillMe(elt);
|
||||||
final String id = path.getComment();
|
final String id = path.getComment();
|
||||||
if (id != null) {
|
if (id != null)
|
||||||
elt.setAttribute("id", id);
|
elt.setAttribute("id", id);
|
||||||
}
|
|
||||||
final String codeLine = path.getCodeLine();
|
final String codeLine = path.getCodeLine();
|
||||||
if (codeLine != null) {
|
if (codeLine != null)
|
||||||
elt.setAttribute("codeLine", codeLine);
|
elt.setAttribute("codeLine", codeLine);
|
||||||
}
|
|
||||||
addFilterShadowId(elt, deltaShadow);
|
addFilterShadowId(elt, deltaShadow);
|
||||||
getG().appendChild(elt);
|
getG().appendChild(elt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getFillClassForDark() {
|
||||||
|
final String result = "f_" + fill.toLowerCase().replaceAll("\\#", "") + "_"
|
||||||
|
+ fillDark.toLowerCase().replaceAll("\\#", "");
|
||||||
|
this.classesForDarkness.add(result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
private void fillMe(Element elt) {
|
private void fillMe(Element elt) {
|
||||||
if (fill.equals("#00000000")) {
|
if (fill.equals("#00000000"))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (fill.equals(fillDark) == false) {
|
||||||
|
elt.setAttribute("class", getFillClassForDark());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fill.matches("#[0-9A-Fa-f]{8}")) {
|
if (fill.matches("#[0-9A-Fa-f]{8}")) {
|
||||||
elt.setAttribute("fill", fill.substring(0, 7));
|
elt.setAttribute("fill", fill.substring(0, 7));
|
||||||
final double opacity = Integer.parseInt(fill.substring(7), 16) / 255.0;
|
final double opacity = Integer.parseInt(fill.substring(7), 16) / 255.0;
|
||||||
@ -708,9 +746,9 @@ public class SvgGraphics {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void addFilterShadowId(final Element elt, double deltaShadow) {
|
private void addFilterShadowId(final Element elt, double deltaShadow) {
|
||||||
if (deltaShadow > 0) {
|
if (deltaShadow > 0)
|
||||||
elt.setAttribute("filter", "url(#" + shadowId + ")");
|
elt.setAttribute("filter", "url(#" + shadowId + ")");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private StringBuilder currentPath = null;
|
private StringBuilder currentPath = null;
|
||||||
@ -776,19 +814,18 @@ public class SvgGraphics {
|
|||||||
final double coord[] = new double[6];
|
final double coord[] = new double[6];
|
||||||
while (path.isDone() == false) {
|
while (path.isDone() == false) {
|
||||||
final int code = path.currentSegment(coord);
|
final int code = path.currentSegment(coord);
|
||||||
if (code == PathIterator.SEG_MOVETO) {
|
if (code == PathIterator.SEG_MOVETO)
|
||||||
this.moveto(coord[0] + x, coord[1] + y);
|
this.moveto(coord[0] + x, coord[1] + y);
|
||||||
} else if (code == PathIterator.SEG_LINETO) {
|
else if (code == PathIterator.SEG_LINETO)
|
||||||
this.lineto(coord[0] + x, coord[1] + y);
|
this.lineto(coord[0] + x, coord[1] + y);
|
||||||
} else if (code == PathIterator.SEG_CLOSE) {
|
else if (code == PathIterator.SEG_CLOSE)
|
||||||
this.closepath();
|
this.closepath();
|
||||||
} else if (code == PathIterator.SEG_CUBICTO) {
|
else if (code == PathIterator.SEG_CUBICTO)
|
||||||
this.curveto(coord[0] + x, coord[1] + y, coord[2] + x, coord[3] + y, coord[4] + x, coord[5] + y);
|
this.curveto(coord[0] + x, coord[1] + y, coord[2] + x, coord[3] + y, coord[4] + x, coord[5] + y);
|
||||||
} else if (code == PathIterator.SEG_QUADTO) {
|
else if (code == PathIterator.SEG_QUADTO)
|
||||||
this.quadto(coord[0] + x, coord[1] + y, coord[2] + x, coord[3] + y);
|
this.quadto(coord[0] + x, coord[1] + y, coord[2] + x, coord[3] + y);
|
||||||
} else {
|
else
|
||||||
throw new UnsupportedOperationException("code=" + code);
|
throw new UnsupportedOperationException("code=" + code);
|
||||||
}
|
|
||||||
|
|
||||||
path.next();
|
path.next();
|
||||||
}
|
}
|
||||||
@ -831,9 +868,9 @@ public class SvgGraphics {
|
|||||||
private String manageScale(UImageSvg svgImage) {
|
private String manageScale(UImageSvg svgImage) {
|
||||||
final double svgScale = svgImage.getScale();
|
final double svgScale = svgImage.getScale();
|
||||||
String svg = svgImage.getSvg(false);
|
String svg = svgImage.getSvg(false);
|
||||||
if (svgScale * scale == 1) {
|
if (svgScale * scale == 1)
|
||||||
return svg;
|
return svg;
|
||||||
}
|
|
||||||
final String svg2 = svg.replace('\n', ' ').replace('\r', ' ');
|
final String svg2 = svg.replace('\n', ' ').replace('\r', ' ');
|
||||||
if (svg2.contains("<g ") == false && svg2.contains("<g>") == false) {
|
if (svg2.contains("<g ") == false && svg2.contains("<g>") == false) {
|
||||||
svg = svg.replaceFirst("\\<svg\\>", "<svg><g>");
|
svg = svg.replaceFirst("\\<svg\\>", "<svg><g>");
|
||||||
@ -883,9 +920,9 @@ public class SvgGraphics {
|
|||||||
private void addFilter(Element filter, String name, String... data) {
|
private void addFilter(Element filter, String name, String... data) {
|
||||||
assert data.length % 2 == 0;
|
assert data.length % 2 == 0;
|
||||||
final Element elt = (Element) document.createElement(name);
|
final Element elt = (Element) document.createElement(name);
|
||||||
for (int i = 0; i < data.length; i += 2) {
|
for (int i = 0; i < data.length; i += 2)
|
||||||
elt.setAttribute(data[i], data[i + 1]);
|
elt.setAttribute(data[i], data[i + 1]);
|
||||||
}
|
|
||||||
filter.appendChild(elt);
|
filter.appendChild(elt);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -914,11 +951,9 @@ public class SvgGraphics {
|
|||||||
// javascript: security issue
|
// javascript: security issue
|
||||||
if (SecurityUtils.ignoreThisLink(url))
|
if (SecurityUtils.ignoreThisLink(url))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
||||||
if (pendingAction.size() > 0) {
|
if (pendingAction.size() > 0)
|
||||||
closeLink();
|
closeLink();
|
||||||
}
|
|
||||||
|
|
||||||
pendingAction.add(0, (Element) document.createElement("a"));
|
pendingAction.add(0, (Element) document.createElement("a"));
|
||||||
pendingAction.get(0).setAttribute("target", target);
|
pendingAction.get(0).setAttribute("target", target);
|
||||||
|
@ -42,6 +42,7 @@ import net.sourceforge.plantuml.ISkinSimple;
|
|||||||
import net.sourceforge.plantuml.command.Command;
|
import net.sourceforge.plantuml.command.Command;
|
||||||
import net.sourceforge.plantuml.command.CommandFootboxIgnored;
|
import net.sourceforge.plantuml.command.CommandFootboxIgnored;
|
||||||
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
||||||
|
import net.sourceforge.plantuml.command.CommonCommands;
|
||||||
import net.sourceforge.plantuml.core.UmlSource;
|
import net.sourceforge.plantuml.core.UmlSource;
|
||||||
import net.sourceforge.plantuml.timingdiagram.command.CommandAnalog;
|
import net.sourceforge.plantuml.timingdiagram.command.CommandAnalog;
|
||||||
import net.sourceforge.plantuml.timingdiagram.command.CommandAtPlayer;
|
import net.sourceforge.plantuml.timingdiagram.command.CommandAtPlayer;
|
||||||
@ -76,7 +77,7 @@ public class TimingDiagramFactory extends PSystemCommandFactory {
|
|||||||
|
|
||||||
final List<Command> cmds = new ArrayList<>();
|
final List<Command> cmds = new ArrayList<>();
|
||||||
|
|
||||||
addCommonCommands1(cmds);
|
CommonCommands.addCommonCommands1(cmds);
|
||||||
cmds.add(new CommandFootboxIgnored());
|
cmds.add(new CommandFootboxIgnored());
|
||||||
cmds.add(new CommandRobustConcise());
|
cmds.add(new CommandRobustConcise());
|
||||||
cmds.add(new CommandClock());
|
cmds.add(new CommandClock());
|
||||||
|
@ -54,4 +54,6 @@ public interface HColor extends UChange {
|
|||||||
|
|
||||||
public HColor reverse();
|
public HColor reverse();
|
||||||
|
|
||||||
|
public HColor darkSchemeTheme();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -75,5 +75,10 @@ abstract class HColorAbstract implements HColor {
|
|||||||
public String asString() {
|
public String asString() {
|
||||||
return "?" + getClass().getSimpleName();
|
return "?" + getClass().getSimpleName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HColor darkSchemeTheme() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -43,6 +43,7 @@ public class HColorSimple extends HColorAbstract implements HColor {
|
|||||||
|
|
||||||
private final Color color;
|
private final Color color;
|
||||||
private final boolean monochrome;
|
private final boolean monochrome;
|
||||||
|
private HColor dark;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
@ -112,6 +113,13 @@ public class HColorSimple extends HColorAbstract implements HColor {
|
|||||||
public HColorSimple(Color c, boolean monochrome) {
|
public HColorSimple(Color c, boolean monochrome) {
|
||||||
this.color = c;
|
this.color = c;
|
||||||
this.monochrome = monochrome;
|
this.monochrome = monochrome;
|
||||||
|
this.dark = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
private HColorSimple(Color c, boolean monochrome, HColor dark) {
|
||||||
|
this.color = c;
|
||||||
|
this.monochrome = monochrome;
|
||||||
|
this.dark = dark;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Color getColor999() {
|
public Color getColor999() {
|
||||||
@ -188,4 +196,13 @@ public class HColorSimple extends HColorAbstract implements HColor {
|
|||||||
return (x + (y - x) * factor);
|
return (x + (y - x) * factor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public HColor withDark(HColor dark) {
|
||||||
|
return new HColorSimple(color, monochrome, dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HColor darkSchemeTheme() {
|
||||||
|
return dark;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,7 @@ public class DriverEllipseSvg implements UDriver<UEllipse, SvgGraphics> {
|
|||||||
final String backcolor = mapper.toSvg(back);
|
final String backcolor = mapper.toSvg(back);
|
||||||
svg.setFillColor(backcolor);
|
svg.setFillColor(backcolor);
|
||||||
}
|
}
|
||||||
DriverRectangleSvg.applyColor(svg, mapper, param);
|
DriverRectangleSvg.applyStrokeColor(svg, mapper, param);
|
||||||
// svg.setStrokeColor(StringUtils.getAsSvg(mapper, param.getColor()));
|
// svg.setStrokeColor(StringUtils.getAsSvg(mapper, param.getColor()));
|
||||||
svg.setStrokeWidth(param.getStroke().getThickness(), param.getStroke().getDasharraySvg());
|
svg.setStrokeWidth(param.getStroke().getThickness(), param.getStroke().getDasharraySvg());
|
||||||
|
|
||||||
|
@ -66,11 +66,17 @@ public class DriverRectangleSvg implements UDriver<URectangle, SvgGraphics> {
|
|||||||
final String id = svg.createSvgGradient(mapper.toRGB(gr.getColor1()), mapper.toRGB(gr.getColor2()),
|
final String id = svg.createSvgGradient(mapper.toRGB(gr.getColor1()), mapper.toRGB(gr.getColor2()),
|
||||||
gr.getPolicy());
|
gr.getPolicy());
|
||||||
svg.setFillColor("url(#" + id + ")");
|
svg.setFillColor("url(#" + id + ")");
|
||||||
applyColor(svg, mapper, param);
|
applyStrokeColor(svg, mapper, param);
|
||||||
} else {
|
} else {
|
||||||
final String backcolor = mapper.toSvg(back);
|
final String backcolor = mapper.toSvg(back);
|
||||||
svg.setFillColor(backcolor);
|
final HColor dark = back == null ? null : back.darkSchemeTheme();
|
||||||
applyColor(svg, mapper, param);
|
if (dark == back) {
|
||||||
|
svg.setFillColor(backcolor);
|
||||||
|
} else {
|
||||||
|
final String darkcolor = mapper.toSvg(dark);
|
||||||
|
svg.setFillColor(backcolor, darkcolor);
|
||||||
|
}
|
||||||
|
applyStrokeColor(svg, mapper, param);
|
||||||
}
|
}
|
||||||
|
|
||||||
svg.setStrokeWidth(param.getStroke().getThickness(), param.getStroke().getDasharraySvg());
|
svg.setStrokeWidth(param.getStroke().getThickness(), param.getStroke().getDasharraySvg());
|
||||||
@ -90,7 +96,7 @@ public class DriverRectangleSvg implements UDriver<URectangle, SvgGraphics> {
|
|||||||
rect.getCodeLine());
|
rect.getCodeLine());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void applyColor(SvgGraphics svg, ColorMapper mapper, UParam param) {
|
public static void applyStrokeColor(SvgGraphics svg, ColorMapper mapper, UParam param) {
|
||||||
final HColor color = param.getColor();
|
final HColor color = param.getColor();
|
||||||
if (color instanceof HColorGradient) {
|
if (color instanceof HColorGradient) {
|
||||||
final HColorGradient gr = (HColorGradient) color;
|
final HColorGradient gr = (HColorGradient) color;
|
||||||
|
@ -80,7 +80,7 @@ public class Version {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static int beta() {
|
public static int beta() {
|
||||||
final int beta = 6;
|
final int beta = 8;
|
||||||
return beta;
|
return beta;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,6 +41,7 @@ import java.util.List;
|
|||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
import net.sourceforge.plantuml.command.Command;
|
import net.sourceforge.plantuml.command.Command;
|
||||||
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
||||||
|
import net.sourceforge.plantuml.command.CommonCommands;
|
||||||
import net.sourceforge.plantuml.core.DiagramType;
|
import net.sourceforge.plantuml.core.DiagramType;
|
||||||
import net.sourceforge.plantuml.core.UmlSource;
|
import net.sourceforge.plantuml.core.UmlSource;
|
||||||
|
|
||||||
@ -54,7 +55,7 @@ public class WBSDiagramFactory extends PSystemCommandFactory {
|
|||||||
protected List<Command> createCommands() {
|
protected List<Command> createCommands() {
|
||||||
|
|
||||||
final List<Command> cmds = new ArrayList<>();
|
final List<Command> cmds = new ArrayList<>();
|
||||||
addCommonCommands1(cmds);
|
CommonCommands.addCommonCommands1(cmds);
|
||||||
cmds.add(new CommandWBSItem());
|
cmds.add(new CommandWBSItem());
|
||||||
cmds.add(new CommandWBSItemMultiline());
|
cmds.add(new CommandWBSItemMultiline());
|
||||||
|
|
||||||
|
@ -41,6 +41,7 @@ import java.util.List;
|
|||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
import net.sourceforge.plantuml.command.Command;
|
import net.sourceforge.plantuml.command.Command;
|
||||||
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
||||||
|
import net.sourceforge.plantuml.command.CommonCommands;
|
||||||
import net.sourceforge.plantuml.core.DiagramType;
|
import net.sourceforge.plantuml.core.DiagramType;
|
||||||
import net.sourceforge.plantuml.core.UmlSource;
|
import net.sourceforge.plantuml.core.UmlSource;
|
||||||
|
|
||||||
@ -54,7 +55,7 @@ public class WireDiagramFactory extends PSystemCommandFactory {
|
|||||||
protected List<Command> createCommands() {
|
protected List<Command> createCommands() {
|
||||||
|
|
||||||
final List<Command> cmds = new ArrayList<>();
|
final List<Command> cmds = new ArrayList<>();
|
||||||
addCommonCommands1(cmds);
|
CommonCommands.addCommonCommands1(cmds);
|
||||||
cmds.add(new CommandComponent());
|
cmds.add(new CommandComponent());
|
||||||
cmds.add(new CommandSpot());
|
cmds.add(new CommandSpot());
|
||||||
cmds.add(new CommandGoto());
|
cmds.add(new CommandGoto());
|
||||||
|
Loading…
Reference in New Issue
Block a user