diff --git a/src/net/sourceforge/plantuml/BlockUml.java b/src/net/sourceforge/plantuml/BlockUml.java index 51c3a623d..2d2ecb5d2 100644 --- a/src/net/sourceforge/plantuml/BlockUml.java +++ b/src/net/sourceforge/plantuml/BlockUml.java @@ -175,10 +175,9 @@ public class BlockUml { if (system == null) { if (preprocessorError) system = new PSystemErrorPreprocessor(data, debug); - else { + else system = new PSystemBuilder().createPSystem(data, rawSource, skinParam == null ? Collections.emptyMap() : skinParam.values()); - } } return system; } diff --git a/src/net/sourceforge/plantuml/PSystemBuilder.java b/src/net/sourceforge/plantuml/PSystemBuilder.java index c63aaab93..edd002665 100644 --- a/src/net/sourceforge/plantuml/PSystemBuilder.java +++ b/src/net/sourceforge/plantuml/PSystemBuilder.java @@ -212,8 +212,7 @@ public class PSystemBuilder { if (License.getCurrent() == License.GPL || License.getCurrent() == License.GPLV2) { factories.add(new PSystemXearthFactory()); } - factories.add(new GanttDiagramFactory(DiagramType.GANTT)); - GanttDiagramFactory.clearCache(); + factories.add(new GanttDiagramFactory()); factories.add(new FlowDiagramFactory()); // factories.add(new PSystemTreeFactory(DiagramType.JUNGLE)); // factories.add(new PSystemCuteFactory(DiagramType.CUTE)); diff --git a/src/net/sourceforge/plantuml/StringLocated.java b/src/net/sourceforge/plantuml/StringLocated.java index ec36a5839..9c1775a54 100644 --- a/src/net/sourceforge/plantuml/StringLocated.java +++ b/src/net/sourceforge/plantuml/StringLocated.java @@ -143,7 +143,7 @@ final public class StringLocated { public long getFoxSignature() { if (fox == -1) - fox = FoxSignature.getFoxSignature(getString()); + fox = FoxSignature.getFoxSignatureFromRealString(getString()); return fox; } diff --git a/src/net/sourceforge/plantuml/activitydiagram/ActivityDiagramFactory.java b/src/net/sourceforge/plantuml/activitydiagram/ActivityDiagramFactory.java index 563a96fcd..dd2f03286 100644 --- a/src/net/sourceforge/plantuml/activitydiagram/ActivityDiagramFactory.java +++ b/src/net/sourceforge/plantuml/activitydiagram/ActivityDiagramFactory.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.activitydiagram; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -64,8 +63,7 @@ public class ActivityDiagramFactory extends PSystemCommandFactory { } @Override - protected List createCommands() { - final List cmds = new ArrayList<>(); + protected void initCommandsList(List cmds) { cmds.add(new CommandFootboxIgnored()); CommonCommands.addCommonCommands1(cmds); cmds.add(new CommandRankDir()); @@ -90,8 +88,6 @@ public class ActivityDiagramFactory extends PSystemCommandFactory { cmds.add(new CommandHideShow2()); // addCommand(new CommandInnerConcurrent(system)); - return cmds; - } } diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ActivityDiagramFactory3.java b/src/net/sourceforge/plantuml/activitydiagram3/ActivityDiagramFactory3.java index 48a0a0fcb..4ecc00caf 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ActivityDiagramFactory3.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ActivityDiagramFactory3.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.activitydiagram3; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -93,9 +92,8 @@ import net.sourceforge.plantuml.core.UmlSource; public class ActivityDiagramFactory3 extends PSystemCommandFactory { @Override - protected List createCommands() { + protected void initCommandsList(List cmds) { - final List cmds = new ArrayList<>(); cmds.add(new CommandFootboxIgnored()); CommonCommands.addCommonCommands1(cmds); @@ -155,8 +153,6 @@ public class ActivityDiagramFactory3 extends PSystemCommandFactory { cmds.add(new CommandLabel()); cmds.add(new CommandGoto()); cmds.add(CommandDecoratorMultine.create(new CommandElseIf2(), 50)); - - return cmds; } @Override diff --git a/src/net/sourceforge/plantuml/activitydiagram3/command/CommandActivity3.java b/src/net/sourceforge/plantuml/activitydiagram3/command/CommandActivity3.java index 877f464f9..a19b8288f 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/command/CommandActivity3.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/command/CommandActivity3.java @@ -89,7 +89,7 @@ public class CommandActivity3 extends SingleLineCommand2 { new RegexLeaf("URL", "(" + UrlBuilder.getRegexp() + ")?"), // color().getRegex(), // RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("STEREO", "(\\<{2}.*\\>{2})?"), // + new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceZeroOrMore(), // new RegexLeaf(":"), // new RegexLeaf("LABEL", "(.*)"), // diff --git a/src/net/sourceforge/plantuml/activitydiagram3/command/CommandPartition3.java b/src/net/sourceforge/plantuml/activitydiagram3/command/CommandPartition3.java index 8cd49ab22..e41d96d3e 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/command/CommandPartition3.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/command/CommandPartition3.java @@ -78,7 +78,7 @@ public class CommandPartition3 extends SingleLineCommand2 { RegexLeaf.spaceOneOrMore(), // color("BACK2").getRegex())), // RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("STEREO", "(\\<{2}.*\\>{2})?"), // + new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("\\{?"), // RegexLeaf.end()); diff --git a/src/net/sourceforge/plantuml/activitydiagram3/command/CommandRepeat3.java b/src/net/sourceforge/plantuml/activitydiagram3/command/CommandRepeat3.java index 3df82a139..d2b96990d 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/command/CommandRepeat3.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/command/CommandRepeat3.java @@ -62,7 +62,7 @@ public class CommandRepeat3 extends SingleLineCommand2 { static IRegex getRegexConcat() { return RegexConcat.build(CommandRepeat3.class.getName(), RegexLeaf.start(), // - new RegexLeaf("STEREO", "(\\<{2}.*\\>{2})?"), // + new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), // ColorParser.exp4(), // new RegexLeaf("repeat"), // RegexLeaf.spaceZeroOrMore(), // diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/FtileIfAndStop.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/FtileIfAndStop.java index 50bf0b94c..91a0be805 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/FtileIfAndStop.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/FtileIfAndStop.java @@ -46,7 +46,6 @@ import net.sourceforge.plantuml.LineBreakStrategy; import net.sourceforge.plantuml.activitydiagram3.Branch; import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractConnection; import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractFtile; -import net.sourceforge.plantuml.activitydiagram3.ftile.Arrows; import net.sourceforge.plantuml.activitydiagram3.ftile.Connection; import net.sourceforge.plantuml.activitydiagram3.ftile.Ftile; import net.sourceforge.plantuml.activitydiagram3.ftile.FtileFactory; @@ -60,7 +59,6 @@ import net.sourceforge.plantuml.activitydiagram3.ftile.vertical.FtileDiamondInsi import net.sourceforge.plantuml.awt.geom.XDimension2D; import net.sourceforge.plantuml.awt.geom.XPoint2D; import net.sourceforge.plantuml.creole.CreoleMode; -import net.sourceforge.plantuml.creole.Parser; import net.sourceforge.plantuml.creole.Sheet; import net.sourceforge.plantuml.creole.SheetBlock1; import net.sourceforge.plantuml.creole.SheetBlock2; diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/FtileIfLongHorizontal.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/FtileIfLongHorizontal.java index 816f274ea..d0a53cb2a 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/FtileIfLongHorizontal.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/FtileIfLongHorizontal.java @@ -103,9 +103,7 @@ class FtileIfLongHorizontal extends AbstractFtile { } private static List alignDiamonds(List diamonds, StringBounder stringBounder) { - double maxOutY = 0; - for (Ftile diamond : diamonds) - maxOutY = Math.max(maxOutY, diamond.calculateDimension(stringBounder).getOutY()); + final double maxOutY = getMaxOutY(diamonds, stringBounder); final List result = new ArrayList<>(); for (int i = 0; i < diamonds.size(); i++) { @@ -118,6 +116,13 @@ class FtileIfLongHorizontal extends AbstractFtile { return result; } + private static double getMaxOutY(List diamonds, StringBounder stringBounder) { + double maxOutY = 0; + for (Ftile diamond : diamonds) + maxOutY = Math.max(maxOutY, diamond.calculateDimension(stringBounder).getOutY()); + return maxOutY; + } + public Set getSwimlanes() { final Set result = new HashSet<>(); if (getSwimlaneIn() != null) @@ -508,9 +513,9 @@ class FtileIfLongHorizontal extends AbstractFtile { if (leftOut == null) return new double[] { Double.NaN, Double.NaN }; - if (current == -1) + if (current == -1) throw new IllegalStateException(); - + final int first = getFirstSwimlane(stringBounder, allTiles, allSwimlanes); final int last = getLastSwimlane(stringBounder, allTiles, allSwimlanes); if (current < first || current > last) @@ -660,14 +665,17 @@ class FtileIfLongHorizontal extends AbstractFtile { } private FtileGeometry calculateDimensionInternal(StringBounder stringBounder) { + + final double maxOutY = getMaxOutY(diamonds, stringBounder); + XDimension2D result = new XDimension2D(0, 0); - for (Ftile couple : couples) + for (Ftile couple : couples) result = result.mergeLR(couple.calculateDimension(stringBounder)); - + XDimension2D dimTile2 = tile2.calculateDimension(stringBounder); dimTile2 = dimTile2.delta(0, getDiamondsHeight(stringBounder) / 2); result = result.mergeLR(dimTile2); - result = result.delta(xSeparation * couples.size(), 100); + result = result.delta(xSeparation * couples.size(), Math.max(100, maxOutY)); return new FtileGeometry(result, result.getWidth() / 2, 0); } diff --git a/src/net/sourceforge/plantuml/board/BoardDiagramFactory.java b/src/net/sourceforge/plantuml/board/BoardDiagramFactory.java index 4bb021cbe..f68b6dc0f 100644 --- a/src/net/sourceforge/plantuml/board/BoardDiagramFactory.java +++ b/src/net/sourceforge/plantuml/board/BoardDiagramFactory.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.board; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -52,9 +51,7 @@ public class BoardDiagramFactory extends PSystemCommandFactory { } @Override - protected List createCommands() { - - final List cmds = new ArrayList<>(); + protected void initCommandsList(List cmds) { CommonCommands.addCommonCommands1(cmds); cmds.add(new CommandBoardPlus()); // cmds.add(new CommandMindMapTabulation()); @@ -63,8 +60,6 @@ public class BoardDiagramFactory extends PSystemCommandFactory { // cmds.add(new CommandMindMapRoot()); // cmds.add(new CommandMindMapPlus()); // cmds.add(new CommandMindMapDirection()); - - return cmds; } @Override diff --git a/src/net/sourceforge/plantuml/bpm/BpmDiagramFactory.java b/src/net/sourceforge/plantuml/bpm/BpmDiagramFactory.java index 774c7ebc1..bbb892280 100644 --- a/src/net/sourceforge/plantuml/bpm/BpmDiagramFactory.java +++ b/src/net/sourceforge/plantuml/bpm/BpmDiagramFactory.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.bpm; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -52,8 +51,7 @@ public class BpmDiagramFactory extends PSystemCommandFactory { } @Override - protected List createCommands() { - final List result = new ArrayList<>(); + protected void initCommandsList(List result) { result.add(new CommandDockedEvent()); result.add(new CommandMerge()); result.add(new CommandResume()); @@ -61,7 +59,6 @@ public class BpmDiagramFactory extends PSystemCommandFactory { result.add(new CommandNewBranch()); result.add(new CommandElseBranch()); result.add(new CommandEndBranch()); - return result; } @Override diff --git a/src/net/sourceforge/plantuml/classdiagram/ClassDiagramFactory.java b/src/net/sourceforge/plantuml/classdiagram/ClassDiagramFactory.java index 13500a819..8298f21c9 100644 --- a/src/net/sourceforge/plantuml/classdiagram/ClassDiagramFactory.java +++ b/src/net/sourceforge/plantuml/classdiagram/ClassDiagramFactory.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.classdiagram; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -91,8 +90,7 @@ public class ClassDiagramFactory extends PSystemCommandFactory { } @Override - protected List createCommands() { - final List cmds = new ArrayList<>(); + protected void initCommandsList(List cmds) { cmds.add(new CommandFootboxIgnored()); cmds.add(new CommandRankDir()); @@ -161,7 +159,5 @@ public class ClassDiagramFactory extends PSystemCommandFactory { cmds.add(new CommandCreateElementMultilines(1)); CommonCommands.addTitleCommands(cmds); CommonCommands.addCommonCommands2(cmds); - - return cmds; } } diff --git a/src/net/sourceforge/plantuml/classdiagram/command/CommandCreateClass.java b/src/net/sourceforge/plantuml/classdiagram/command/CommandCreateClass.java index fba1c0a99..0da7939bc 100644 --- a/src/net/sourceforge/plantuml/classdiagram/command/CommandCreateClass.java +++ b/src/net/sourceforge/plantuml/classdiagram/command/CommandCreateClass.java @@ -105,7 +105,7 @@ public class CommandCreateClass extends SingleLineCommand2 { RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("TAGS1", Stereotag.pattern() + "?"), // RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("STEREO", "(\\<{2}.*\\>{2})?"), // + new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("TAGS2", Stereotag.pattern() + "?"), // RegexLeaf.spaceZeroOrMore(), // diff --git a/src/net/sourceforge/plantuml/classdiagram/command/CommandHideShowByGender.java b/src/net/sourceforge/plantuml/classdiagram/command/CommandHideShowByGender.java index 63c88c1b0..01813d979 100644 --- a/src/net/sourceforge/plantuml/classdiagram/command/CommandHideShowByGender.java +++ b/src/net/sourceforge/plantuml/classdiagram/command/CommandHideShowByGender.java @@ -59,7 +59,9 @@ import net.sourceforge.plantuml.sequencediagram.SequenceDiagram; public class CommandHideShowByGender extends SingleLineCommand2 { - public CommandHideShowByGender() { + public static final CommandHideShowByGender ME = new CommandHideShowByGender(); + + private CommandHideShowByGender() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/classdiagram/command/CommandHideShowByVisibility.java b/src/net/sourceforge/plantuml/classdiagram/command/CommandHideShowByVisibility.java index 6f7750235..f24a2b388 100644 --- a/src/net/sourceforge/plantuml/classdiagram/command/CommandHideShowByVisibility.java +++ b/src/net/sourceforge/plantuml/classdiagram/command/CommandHideShowByVisibility.java @@ -54,7 +54,9 @@ import net.sourceforge.plantuml.skin.VisibilityModifier; public class CommandHideShowByVisibility extends SingleLineCommand2 { - public CommandHideShowByVisibility() { + public static final CommandHideShowByVisibility ME = new CommandHideShowByVisibility(); + + private CommandHideShowByVisibility() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommandAffineTransform.java b/src/net/sourceforge/plantuml/command/CommandAffineTransform.java index a86549f67..dfc7456c7 100644 --- a/src/net/sourceforge/plantuml/command/CommandAffineTransform.java +++ b/src/net/sourceforge/plantuml/command/CommandAffineTransform.java @@ -46,7 +46,9 @@ import net.sourceforge.plantuml.command.regex.RegexResult; public class CommandAffineTransform extends SingleLineCommand2 { - public CommandAffineTransform() { + public static final CommandAffineTransform ME = new CommandAffineTransform(); + + private CommandAffineTransform() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommandAffineTransformMultiline.java b/src/net/sourceforge/plantuml/command/CommandAffineTransformMultiline.java index a2f9486d6..3ea2e75b5 100644 --- a/src/net/sourceforge/plantuml/command/CommandAffineTransformMultiline.java +++ b/src/net/sourceforge/plantuml/command/CommandAffineTransformMultiline.java @@ -39,7 +39,9 @@ import net.sourceforge.plantuml.TitledDiagram; public class CommandAffineTransformMultiline extends CommandMultilines { - public CommandAffineTransformMultiline() { + public static final CommandAffineTransformMultiline ME = new CommandAffineTransformMultiline(); + + private CommandAffineTransformMultiline() { super("^!transformation[%s]+\\{[%s]*$"); } diff --git a/src/net/sourceforge/plantuml/command/CommandAssumeTransparent.java b/src/net/sourceforge/plantuml/command/CommandAssumeTransparent.java index 11f4487b9..d7e8fa4b8 100644 --- a/src/net/sourceforge/plantuml/command/CommandAssumeTransparent.java +++ b/src/net/sourceforge/plantuml/command/CommandAssumeTransparent.java @@ -44,7 +44,9 @@ import net.sourceforge.plantuml.command.regex.RegexResult; public class CommandAssumeTransparent extends SingleLineCommand2 { - public CommandAssumeTransparent() { + public static final CommandAssumeTransparent ME = new CommandAssumeTransparent(); + + private CommandAssumeTransparent() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommandCaption.java b/src/net/sourceforge/plantuml/command/CommandCaption.java index 9a6b69d5a..61c2f208c 100644 --- a/src/net/sourceforge/plantuml/command/CommandCaption.java +++ b/src/net/sourceforge/plantuml/command/CommandCaption.java @@ -49,7 +49,9 @@ import net.sourceforge.plantuml.graphic.VerticalAlignment; public class CommandCaption extends SingleLineCommand2 { - public CommandCaption() { + public static final CommandCaption ME = new CommandCaption(); + + private CommandCaption() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommandFooter.java b/src/net/sourceforge/plantuml/command/CommandFooter.java index 5e1d5d515..5d827c54c 100644 --- a/src/net/sourceforge/plantuml/command/CommandFooter.java +++ b/src/net/sourceforge/plantuml/command/CommandFooter.java @@ -49,7 +49,9 @@ import net.sourceforge.plantuml.graphic.HorizontalAlignment; public class CommandFooter extends SingleLineCommand2 { - public CommandFooter() { + public static final CommandFooter ME = new CommandFooter(); + + private CommandFooter() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommandHeader.java b/src/net/sourceforge/plantuml/command/CommandHeader.java index b8d596f54..625d4da55 100644 --- a/src/net/sourceforge/plantuml/command/CommandHeader.java +++ b/src/net/sourceforge/plantuml/command/CommandHeader.java @@ -49,7 +49,9 @@ import net.sourceforge.plantuml.graphic.HorizontalAlignment; public class CommandHeader extends SingleLineCommand2 { - public CommandHeader() { + public static final CommandHeader ME = new CommandHeader(); + + private CommandHeader() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommandLegend.java b/src/net/sourceforge/plantuml/command/CommandLegend.java index dc84a3d9b..b04bf34ff 100644 --- a/src/net/sourceforge/plantuml/command/CommandLegend.java +++ b/src/net/sourceforge/plantuml/command/CommandLegend.java @@ -49,7 +49,9 @@ import net.sourceforge.plantuml.graphic.VerticalAlignment; public class CommandLegend extends SingleLineCommand2 { - public CommandLegend() { + public static final CommandLegend ME = new CommandLegend(); + + private CommandLegend() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommandMainframe.java b/src/net/sourceforge/plantuml/command/CommandMainframe.java index f0ce5902f..4267ac470 100644 --- a/src/net/sourceforge/plantuml/command/CommandMainframe.java +++ b/src/net/sourceforge/plantuml/command/CommandMainframe.java @@ -46,7 +46,9 @@ import net.sourceforge.plantuml.cucadiagram.Display; public class CommandMainframe extends SingleLineCommand2 { - public CommandMainframe() { + public static final CommandMainframe ME = new CommandMainframe(); + + private CommandMainframe() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommandMinwidth.java b/src/net/sourceforge/plantuml/command/CommandMinwidth.java index b260a4038..c2c68ef3f 100644 --- a/src/net/sourceforge/plantuml/command/CommandMinwidth.java +++ b/src/net/sourceforge/plantuml/command/CommandMinwidth.java @@ -44,7 +44,9 @@ import net.sourceforge.plantuml.command.regex.RegexResult; public class CommandMinwidth extends SingleLineCommand2 { - public CommandMinwidth() { + public static final CommandMinwidth ME = new CommandMinwidth(); + + private CommandMinwidth() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommandMultilinesCaption.java b/src/net/sourceforge/plantuml/command/CommandMultilinesCaption.java index a3cc06ed7..f7bbc13d1 100644 --- a/src/net/sourceforge/plantuml/command/CommandMultilinesCaption.java +++ b/src/net/sourceforge/plantuml/command/CommandMultilinesCaption.java @@ -44,7 +44,9 @@ import net.sourceforge.plantuml.ugraphic.color.NoSuchColorException; public class CommandMultilinesCaption extends CommandMultilines { - public CommandMultilinesCaption() { + public static final CommandMultilinesCaption ME = new CommandMultilinesCaption(); + + private CommandMultilinesCaption() { super("^caption$"); } @@ -58,7 +60,8 @@ public class CommandMultilinesCaption extends CommandMultilines { lines = lines.removeEmptyColumns(); final Display strings = lines.toDisplay(); if (strings.size() > 0) { - diagram.setCaption(DisplayPositioned.single(strings.replaceBackslashT(), HorizontalAlignment.CENTER, VerticalAlignment.BOTTOM)); + diagram.setCaption(DisplayPositioned.single(strings.replaceBackslashT(), HorizontalAlignment.CENTER, + VerticalAlignment.BOTTOM)); return CommandExecutionResult.ok(); } return CommandExecutionResult.error("No caption defined"); diff --git a/src/net/sourceforge/plantuml/command/CommandMultilinesFooter.java b/src/net/sourceforge/plantuml/command/CommandMultilinesFooter.java index cb609b5cb..901ea5b55 100644 --- a/src/net/sourceforge/plantuml/command/CommandMultilinesFooter.java +++ b/src/net/sourceforge/plantuml/command/CommandMultilinesFooter.java @@ -45,7 +45,9 @@ import net.sourceforge.plantuml.ugraphic.color.NoSuchColorException; public class CommandMultilinesFooter extends CommandMultilines { - public CommandMultilinesFooter() { + public static final CommandMultilinesFooter ME = new CommandMultilinesFooter(); + + private CommandMultilinesFooter() { super("^(?:(left|right|center)?[%s]*)footer$"); } diff --git a/src/net/sourceforge/plantuml/command/CommandMultilinesHeader.java b/src/net/sourceforge/plantuml/command/CommandMultilinesHeader.java index 20d78162b..c3961c474 100644 --- a/src/net/sourceforge/plantuml/command/CommandMultilinesHeader.java +++ b/src/net/sourceforge/plantuml/command/CommandMultilinesHeader.java @@ -45,7 +45,9 @@ import net.sourceforge.plantuml.ugraphic.color.NoSuchColorException; public class CommandMultilinesHeader extends CommandMultilines { - public CommandMultilinesHeader() { + public static final CommandMultilinesHeader ME = new CommandMultilinesHeader(); + + private CommandMultilinesHeader() { super("^(?:(left|right|center)?[%s]*)header$"); } diff --git a/src/net/sourceforge/plantuml/command/CommandMultilinesLegend.java b/src/net/sourceforge/plantuml/command/CommandMultilinesLegend.java index e46dc0061..96c780813 100644 --- a/src/net/sourceforge/plantuml/command/CommandMultilinesLegend.java +++ b/src/net/sourceforge/plantuml/command/CommandMultilinesLegend.java @@ -49,7 +49,9 @@ import net.sourceforge.plantuml.ugraphic.color.NoSuchColorException; public class CommandMultilinesLegend extends CommandMultilines2 { - public CommandMultilinesLegend() { + public static final CommandMultilinesLegend ME = new CommandMultilinesLegend(); + + private CommandMultilinesLegend() { super(getRegexConcat(), MultilinesStrategy.REMOVE_STARTING_QUOTE, Trim.BOTH); } diff --git a/src/net/sourceforge/plantuml/command/CommandMultilinesTitle.java b/src/net/sourceforge/plantuml/command/CommandMultilinesTitle.java index 652c12a39..cb03dff54 100644 --- a/src/net/sourceforge/plantuml/command/CommandMultilinesTitle.java +++ b/src/net/sourceforge/plantuml/command/CommandMultilinesTitle.java @@ -44,7 +44,9 @@ import net.sourceforge.plantuml.ugraphic.color.NoSuchColorException; public class CommandMultilinesTitle extends CommandMultilines { - public CommandMultilinesTitle() { + public static final CommandMultilinesTitle ME = new CommandMultilinesTitle(); + + private CommandMultilinesTitle() { super("^title$"); } @@ -58,7 +60,8 @@ public class CommandMultilinesTitle extends CommandMultilines { lines = lines.removeEmptyColumns(); final Display strings = lines.toDisplay(); if (strings.size() > 0) { - diagram.setTitle(DisplayPositioned.single(strings.replaceBackslashT(), HorizontalAlignment.CENTER, VerticalAlignment.TOP)); + diagram.setTitle(DisplayPositioned.single(strings.replaceBackslashT(), HorizontalAlignment.CENTER, + VerticalAlignment.TOP)); return CommandExecutionResult.ok(); } return CommandExecutionResult.error("No title defined"); diff --git a/src/net/sourceforge/plantuml/command/CommandNamespace.java b/src/net/sourceforge/plantuml/command/CommandNamespace.java index 7d38f4094..5863d3518 100644 --- a/src/net/sourceforge/plantuml/command/CommandNamespace.java +++ b/src/net/sourceforge/plantuml/command/CommandNamespace.java @@ -60,6 +60,8 @@ import net.sourceforge.plantuml.ugraphic.color.NoSuchColorException; public class CommandNamespace extends SingleLineCommand2 { + public static final String NAMESPACE_REGEX = "([%pLN_][-%pLN_.:\\\\/]*)"; + public CommandNamespace() { super(getRegexConcat()); } @@ -68,7 +70,7 @@ public class CommandNamespace extends SingleLineCommand2 { return RegexConcat.build(CommandNamespace.class.getName(), RegexLeaf.start(), // new RegexLeaf("namespace"), // RegexLeaf.spaceOneOrMore(), // - new RegexLeaf("NAME", "([%pLN_][-%pLN_.:\\\\]*)"), // + new RegexLeaf("NAME", NAMESPACE_REGEX), // RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("STEREOTYPE", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceZeroOrMore(), // diff --git a/src/net/sourceforge/plantuml/command/CommandNamespace2.java b/src/net/sourceforge/plantuml/command/CommandNamespace2.java index 2bc48bbda..a81912b87 100644 --- a/src/net/sourceforge/plantuml/command/CommandNamespace2.java +++ b/src/net/sourceforge/plantuml/command/CommandNamespace2.java @@ -74,7 +74,7 @@ public class CommandNamespace2 extends SingleLineCommand2 { new RegexLeaf("as"), // RegexLeaf.spaceOneOrMore(), // - new RegexLeaf("NAME", "([%pLN_][-%pLN_.:\\\\]*)"), // + new RegexLeaf("NAME", CommandNamespace.NAMESPACE_REGEX), // RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("STEREOTYPE", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceZeroOrMore(), // @@ -110,8 +110,7 @@ public class CommandNamespace2 extends SingleLineCommand2 { final String color = arg.get("COLOR", 0); if (color != null) { - p.setSpecificColorTOBEREMOVED(ColorType.BACK, - diagram.getSkinParam().getIHtmlColorSet().getColor(color)); + p.setSpecificColorTOBEREMOVED(ColorType.BACK, diagram.getSkinParam().getIHtmlColorSet().getColor(color)); } return CommandExecutionResult.ok(); } diff --git a/src/net/sourceforge/plantuml/command/CommandNamespaceEmpty.java b/src/net/sourceforge/plantuml/command/CommandNamespaceEmpty.java index 2576bc11a..9d3266238 100644 --- a/src/net/sourceforge/plantuml/command/CommandNamespaceEmpty.java +++ b/src/net/sourceforge/plantuml/command/CommandNamespaceEmpty.java @@ -66,7 +66,7 @@ public class CommandNamespaceEmpty extends SingleLineCommand2 { return RegexConcat.build(CommandNamespaceEmpty.class.getName(), RegexLeaf.start(), // new RegexLeaf("namespace"), // RegexLeaf.spaceOneOrMore(), // - new RegexLeaf("NAME", "([%pLN_][-%pLN_.:\\\\]*)"), // + new RegexLeaf("NAME", CommandNamespace.NAMESPACE_REGEX), // RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("STEREOTYPE", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceZeroOrMore(), // @@ -104,8 +104,7 @@ public class CommandNamespaceEmpty extends SingleLineCommand2 { final String color = arg.get("COLOR", 0); if (color != null) { - p.setSpecificColorTOBEREMOVED(ColorType.BACK, - diagram.getSkinParam().getIHtmlColorSet().getColor(color)); + p.setSpecificColorTOBEREMOVED(ColorType.BACK, diagram.getSkinParam().getIHtmlColorSet().getColor(color)); } diagram.endGroup(); return CommandExecutionResult.ok(); diff --git a/src/net/sourceforge/plantuml/command/CommandNope.java b/src/net/sourceforge/plantuml/command/CommandNope.java index 170c32d89..c4d067510 100644 --- a/src/net/sourceforge/plantuml/command/CommandNope.java +++ b/src/net/sourceforge/plantuml/command/CommandNope.java @@ -44,7 +44,9 @@ import net.sourceforge.plantuml.core.Diagram; public class CommandNope extends SingleLineCommand2 { - public CommandNope() { + public static final CommandNope ME = new CommandNope(); + + private CommandNope() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommandPage.java b/src/net/sourceforge/plantuml/command/CommandPage.java index e121d2c11..11abc0224 100644 --- a/src/net/sourceforge/plantuml/command/CommandPage.java +++ b/src/net/sourceforge/plantuml/command/CommandPage.java @@ -44,7 +44,9 @@ import net.sourceforge.plantuml.command.regex.RegexResult; public class CommandPage extends SingleLineCommand2 { - public CommandPage() { + public static final CommandPage ME = new CommandPage(); + + private CommandPage() { super(getRegexConcat()); } @@ -60,14 +62,13 @@ public class CommandPage extends SingleLineCommand2 { } @Override - protected CommandExecutionResult executeArg(AbstractPSystem system, LineLocation location, - RegexResult arg) { + protected CommandExecutionResult executeArg(AbstractPSystem system, LineLocation location, RegexResult arg) { final int horizontal = Integer.parseInt(arg.get("NB1", 0)); final int vertical = Integer.parseInt(arg.get("NB2", 0)); - if (horizontal <= 0 || vertical <= 0) { + if (horizontal <= 0 || vertical <= 0) return CommandExecutionResult.error("Argument must be positive"); - } + system.setSplitPagesHorizontal(horizontal); system.setSplitPagesVertical(vertical); return CommandExecutionResult.ok(); diff --git a/src/net/sourceforge/plantuml/command/CommandPragma.java b/src/net/sourceforge/plantuml/command/CommandPragma.java index 4dfb337a7..cb264b6b1 100644 --- a/src/net/sourceforge/plantuml/command/CommandPragma.java +++ b/src/net/sourceforge/plantuml/command/CommandPragma.java @@ -49,7 +49,9 @@ import net.sourceforge.plantuml.cucadiagram.dot.GraphvizUtils; public class CommandPragma extends SingleLineCommand2 { - public CommandPragma() { + public static final CommandPragma ME = new CommandPragma(); + + private CommandPragma() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommandRotate.java b/src/net/sourceforge/plantuml/command/CommandRotate.java index 3cf6cc457..11cd8a386 100644 --- a/src/net/sourceforge/plantuml/command/CommandRotate.java +++ b/src/net/sourceforge/plantuml/command/CommandRotate.java @@ -44,7 +44,9 @@ import net.sourceforge.plantuml.command.regex.RegexResult; public class CommandRotate extends SingleLineCommand2 { - public CommandRotate() { + public static final CommandRotate ME = new CommandRotate(); + + private CommandRotate() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommandScale.java b/src/net/sourceforge/plantuml/command/CommandScale.java index 0dd5a7399..b0f6c4a23 100644 --- a/src/net/sourceforge/plantuml/command/CommandScale.java +++ b/src/net/sourceforge/plantuml/command/CommandScale.java @@ -46,7 +46,9 @@ import net.sourceforge.plantuml.command.regex.RegexResult; public class CommandScale extends SingleLineCommand2 { - public CommandScale() { + public static final CommandScale ME = new CommandScale(); + + private CommandScale() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommandScaleMaxHeight.java b/src/net/sourceforge/plantuml/command/CommandScaleMaxHeight.java index 1521b7817..d04973ecf 100644 --- a/src/net/sourceforge/plantuml/command/CommandScaleMaxHeight.java +++ b/src/net/sourceforge/plantuml/command/CommandScaleMaxHeight.java @@ -45,7 +45,9 @@ import net.sourceforge.plantuml.command.regex.RegexResult; public class CommandScaleMaxHeight extends SingleLineCommand2 { - public CommandScaleMaxHeight() { + public static final CommandScaleMaxHeight ME = new CommandScaleMaxHeight(); + + private CommandScaleMaxHeight() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommandScaleMaxWidth.java b/src/net/sourceforge/plantuml/command/CommandScaleMaxWidth.java index 54fbbd640..4e0921201 100644 --- a/src/net/sourceforge/plantuml/command/CommandScaleMaxWidth.java +++ b/src/net/sourceforge/plantuml/command/CommandScaleMaxWidth.java @@ -45,7 +45,9 @@ import net.sourceforge.plantuml.command.regex.RegexResult; public class CommandScaleMaxWidth extends SingleLineCommand2 { - public CommandScaleMaxWidth() { + public static final CommandScaleMaxWidth ME = new CommandScaleMaxWidth(); + + private CommandScaleMaxWidth() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommandScaleMaxWidthAndHeight.java b/src/net/sourceforge/plantuml/command/CommandScaleMaxWidthAndHeight.java index 8b8cba777..2b987fd2f 100644 --- a/src/net/sourceforge/plantuml/command/CommandScaleMaxWidthAndHeight.java +++ b/src/net/sourceforge/plantuml/command/CommandScaleMaxWidthAndHeight.java @@ -45,7 +45,9 @@ import net.sourceforge.plantuml.command.regex.RegexResult; public class CommandScaleMaxWidthAndHeight extends SingleLineCommand2 { - public CommandScaleMaxWidthAndHeight() { + public static final CommandScaleMaxWidthAndHeight ME = new CommandScaleMaxWidthAndHeight(); + + private CommandScaleMaxWidthAndHeight() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommandScaleWidthAndHeight.java b/src/net/sourceforge/plantuml/command/CommandScaleWidthAndHeight.java index 6c3b98ae4..faf41c20e 100644 --- a/src/net/sourceforge/plantuml/command/CommandScaleWidthAndHeight.java +++ b/src/net/sourceforge/plantuml/command/CommandScaleWidthAndHeight.java @@ -45,7 +45,9 @@ import net.sourceforge.plantuml.command.regex.RegexResult; public class CommandScaleWidthAndHeight extends SingleLineCommand2 { - public CommandScaleWidthAndHeight() { + public static final CommandScaleWidthAndHeight ME = new CommandScaleWidthAndHeight(); + + private CommandScaleWidthAndHeight() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommandScaleWidthOrHeight.java b/src/net/sourceforge/plantuml/command/CommandScaleWidthOrHeight.java index ce3a594ba..785aa603d 100644 --- a/src/net/sourceforge/plantuml/command/CommandScaleWidthOrHeight.java +++ b/src/net/sourceforge/plantuml/command/CommandScaleWidthOrHeight.java @@ -46,7 +46,9 @@ import net.sourceforge.plantuml.command.regex.RegexResult; public class CommandScaleWidthOrHeight extends SingleLineCommand2 { - public CommandScaleWidthOrHeight() { + public static final CommandScaleWidthOrHeight ME = new CommandScaleWidthOrHeight(); + + private CommandScaleWidthOrHeight() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommandSkinParam.java b/src/net/sourceforge/plantuml/command/CommandSkinParam.java index 5ea149719..b5950d196 100644 --- a/src/net/sourceforge/plantuml/command/CommandSkinParam.java +++ b/src/net/sourceforge/plantuml/command/CommandSkinParam.java @@ -45,7 +45,9 @@ import net.sourceforge.plantuml.style.NoStyleAvailableException; public class CommandSkinParam extends SingleLineCommand2 { - public CommandSkinParam() { + public static final CommandSkinParam ME = new CommandSkinParam(); + + private CommandSkinParam() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommandSkinParamMultilines.java b/src/net/sourceforge/plantuml/command/CommandSkinParamMultilines.java index f7425e630..02983ddf9 100644 --- a/src/net/sourceforge/plantuml/command/CommandSkinParamMultilines.java +++ b/src/net/sourceforge/plantuml/command/CommandSkinParamMultilines.java @@ -42,16 +42,18 @@ import net.sourceforge.plantuml.command.regex.MyPattern; public class CommandSkinParamMultilines extends CommandMultilinesBracket { - public CommandSkinParamMultilines() { + public static final CommandSkinParamMultilines ME = new CommandSkinParamMultilines(); + + private CommandSkinParamMultilines() { super("^skinparam[%s]*(?:[%s]+([\\w.]*(?:\\<\\<.*\\>\\>)?[\\w.]*))?[%s]*\\{$"); } @Override protected boolean isLineConsistent(String line, int level) { line = StringUtils.trin(line); - if (hasStartingQuote(line)) { + if (hasStartingQuote(line)) return true; - } + return SkinLoader.p1.matcher(line).matches(); } @@ -64,9 +66,9 @@ public class CommandSkinParamMultilines extends CommandMultilinesBracket { - public CommandSpriteFile() { + public static final CommandSpriteFile ME = new CommandSpriteFile(); + + private CommandSpriteFile() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommandSpriteSvg.java b/src/net/sourceforge/plantuml/command/CommandSpriteSvg.java index 81a217b76..d09c3cdcd 100644 --- a/src/net/sourceforge/plantuml/command/CommandSpriteSvg.java +++ b/src/net/sourceforge/plantuml/command/CommandSpriteSvg.java @@ -45,7 +45,9 @@ import net.sourceforge.plantuml.emoji.SvgNanoParser; public class CommandSpriteSvg extends SingleLineCommand2 { - public CommandSpriteSvg() { + public static final CommandSpriteSvg ME = new CommandSpriteSvg(); + + private CommandSpriteSvg() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommandSpriteSvgMultiline.java b/src/net/sourceforge/plantuml/command/CommandSpriteSvgMultiline.java index 95ad1ba19..f4f02c5a4 100644 --- a/src/net/sourceforge/plantuml/command/CommandSpriteSvgMultiline.java +++ b/src/net/sourceforge/plantuml/command/CommandSpriteSvgMultiline.java @@ -46,7 +46,9 @@ import net.sourceforge.plantuml.ugraphic.color.NoSuchColorException; public class CommandSpriteSvgMultiline extends CommandMultilines2 { - public CommandSpriteSvgMultiline() { + public static final CommandSpriteSvgMultiline ME = new CommandSpriteSvgMultiline(); + + private CommandSpriteSvgMultiline() { super(getRegexConcat(), MultilinesStrategy.KEEP_STARTING_QUOTE, Trim.BOTH); } diff --git a/src/net/sourceforge/plantuml/command/CommandTitle.java b/src/net/sourceforge/plantuml/command/CommandTitle.java index 5e0c3829a..fc7d29873 100644 --- a/src/net/sourceforge/plantuml/command/CommandTitle.java +++ b/src/net/sourceforge/plantuml/command/CommandTitle.java @@ -49,7 +49,9 @@ import net.sourceforge.plantuml.graphic.VerticalAlignment; public class CommandTitle extends SingleLineCommand2 { - public CommandTitle() { + public static final CommandTitle ME = new CommandTitle(); + + private CommandTitle() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/command/CommonCommands.java b/src/net/sourceforge/plantuml/command/CommonCommands.java index da1e6f1bf..fed017c63 100644 --- a/src/net/sourceforge/plantuml/command/CommonCommands.java +++ b/src/net/sourceforge/plantuml/command/CommonCommands.java @@ -56,56 +56,56 @@ public final class CommonCommands { } static public void addCommonCommands2(List cmds) { - cmds.add(new CommandNope()); - cmds.add(new CommandPragma()); - cmds.add(new CommandAssumeTransparent()); + cmds.add(CommandNope.ME); + cmds.add(CommandPragma.ME); + cmds.add(CommandAssumeTransparent.ME); - 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()); + cmds.add(CommandSkinParam.ME); + cmds.add(CommandSkinParamMultilines.ME); + cmds.add(CommandSkin.ME); + cmds.add(CommandMinwidth.ME); + cmds.add(CommandPage.ME); + cmds.add(CommandRotate.ME); + cmds.add(CommandScale.ME); + cmds.add(CommandScaleWidthAndHeight.ME); + cmds.add(CommandScaleWidthOrHeight.ME); + cmds.add(CommandScaleMaxWidth.ME); + cmds.add(CommandScaleMaxHeight.ME); + cmds.add(CommandScaleMaxWidthAndHeight.ME); + cmds.add(CommandAffineTransform.ME); + cmds.add(CommandAffineTransformMultiline.ME); final CommandFactorySprite factorySpriteCommand = new CommandFactorySprite(); cmds.add(factorySpriteCommand.createMultiLine(false)); cmds.add(factorySpriteCommand.createSingleLine()); - cmds.add(new CommandSpriteSvg()); - cmds.add(new CommandSpriteFile()); - cmds.add(new CommandSpriteSvgMultiline()); + cmds.add(CommandSpriteSvg.ME); + cmds.add(CommandSpriteFile.ME); + cmds.add(CommandSpriteSvgMultiline.ME); - cmds.add(new CommandStyleMultilinesCSS()); - cmds.add(new CommandStyleImport()); + cmds.add(CommandStyleMultilinesCSS.ME); + cmds.add(CommandStyleImport.ME); } static public void addCommonHides(List cmds) { - cmds.add(new CommandHideEmptyDescription()); - cmds.add(new CommandHideShowByVisibility()); - cmds.add(new CommandHideShowByGender()); + cmds.add(CommandHideEmptyDescription.ME); + cmds.add(CommandHideShowByVisibility.ME); + cmds.add(CommandHideShowByGender.ME); } static public void addTitleCommands(List 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(CommandTitle.ME); + cmds.add(CommandMainframe.ME); + cmds.add(CommandCaption.ME); + cmds.add(CommandMultilinesCaption.ME); + cmds.add(CommandMultilinesTitle.ME); + cmds.add(CommandMultilinesLegend.ME); + cmds.add(CommandLegend.ME); - cmds.add(new CommandFooter()); - cmds.add(new CommandMultilinesFooter()); + cmds.add(CommandFooter.ME); + cmds.add(CommandMultilinesFooter.ME); - cmds.add(new CommandHeader()); - cmds.add(new CommandMultilinesHeader()); + cmds.add(CommandHeader.ME); + cmds.add(CommandMultilinesHeader.ME); } } diff --git a/src/net/sourceforge/plantuml/command/PSystemCommandFactory.java b/src/net/sourceforge/plantuml/command/PSystemCommandFactory.java index 33e1a59ef..1ebe6c5c2 100644 --- a/src/net/sourceforge/plantuml/command/PSystemCommandFactory.java +++ b/src/net/sourceforge/plantuml/command/PSystemCommandFactory.java @@ -35,6 +35,7 @@ */ package net.sourceforge.plantuml.command; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -55,9 +56,9 @@ import net.sourceforge.plantuml.version.IteratorCounter2; public abstract class PSystemCommandFactory extends PSystemAbstractFactory { - private List cmds; + private final List cmds = new ArrayList<>(); - protected abstract List createCommands(); + protected abstract void initCommandsList(List cmds); public abstract AbstractPSystem createEmptyDiagram(UmlSource source, Map skinParam); @@ -149,8 +150,10 @@ public abstract class PSystemCommandFactory extends PSystemAbstractFactory { private Step getCandidate(final IteratorCounter2 it) { final BlocLines single = BlocLines.single(it.peek()); - if (cmds == null) - cmds = createCommands(); + synchronized (cmds) { + if (cmds.size() == 0) + initCommandsList(cmds); + } for (Command cmd : cmds) { final CommandControl result = cmd.isValid(single); diff --git a/src/net/sourceforge/plantuml/command/note/CommandFactoryNote.java b/src/net/sourceforge/plantuml/command/note/CommandFactoryNote.java index d53c567ca..8b2ec9031 100644 --- a/src/net/sourceforge/plantuml/command/note/CommandFactoryNote.java +++ b/src/net/sourceforge/plantuml/command/note/CommandFactoryNote.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.command.note; -import net.sourceforge.plantuml.ColorParam; import net.sourceforge.plantuml.LineLocation; import net.sourceforge.plantuml.baraye.IEntity; import net.sourceforge.plantuml.classdiagram.AbstractEntityDiagram; @@ -72,7 +71,7 @@ public final class CommandFactoryNote implements SingleMultiFactoryCommand{2})?"), // + new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceZeroOrMore(), // ColorParser.exp1(), // RegexLeaf.end() // @@ -93,7 +92,7 @@ public final class CommandFactoryNote implements SingleMultiFactoryCommand{2})?"), // + new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceZeroOrMore(), // ColorParser.exp1(), // RegexLeaf.end() // diff --git a/src/net/sourceforge/plantuml/command/note/CommandFactoryNoteOnEntity.java b/src/net/sourceforge/plantuml/command/note/CommandFactoryNoteOnEntity.java index a6880f59a..7d10f4a56 100644 --- a/src/net/sourceforge/plantuml/command/note/CommandFactoryNoteOnEntity.java +++ b/src/net/sourceforge/plantuml/command/note/CommandFactoryNoteOnEntity.java @@ -94,7 +94,7 @@ public final class CommandFactoryNoteOnEntity implements SingleMultiFactoryComma RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("TAGS1", Stereotag.pattern() + "?"), // RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("STEREO", "(\\<{2}.*\\>{2})?"), // + new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("TAGS2", Stereotag.pattern() + "?"), // RegexLeaf.spaceZeroOrMore(), // @@ -129,7 +129,7 @@ public final class CommandFactoryNoteOnEntity implements SingleMultiFactoryComma RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("TAGS1", Stereotag.pattern() + "?"), // RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("STEREO", "(\\<{2}.*\\>{2})?"), // + new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("TAGS2", Stereotag.pattern() + "?"), // RegexLeaf.spaceZeroOrMore(), // @@ -155,7 +155,7 @@ public final class CommandFactoryNoteOnEntity implements SingleMultiFactoryComma RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("TAGS1", Stereotag.pattern() + "?"), // RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("STEREO", "(\\<{2}.*\\>{2})?"), // + new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("TAGS2", Stereotag.pattern() + "?"), // RegexLeaf.spaceZeroOrMore(), // diff --git a/src/net/sourceforge/plantuml/command/note/CommandFactoryNoteOnLink.java b/src/net/sourceforge/plantuml/command/note/CommandFactoryNoteOnLink.java index df0d6daeb..20f860bc3 100644 --- a/src/net/sourceforge/plantuml/command/note/CommandFactoryNoteOnLink.java +++ b/src/net/sourceforge/plantuml/command/note/CommandFactoryNoteOnLink.java @@ -68,7 +68,7 @@ public final class CommandFactoryNoteOnLink implements SingleMultiFactoryCommand RegexLeaf.spaceOneOrMore(), // new RegexLeaf("POSITION", "(right|left|top|bottom)?"), // RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("o[nf]"), // + new RegexLeaf("(on|of)"), // RegexLeaf.spaceOneOrMore(), // new RegexLeaf("link"), // RegexLeaf.spaceZeroOrMore(), // @@ -85,7 +85,7 @@ public final class CommandFactoryNoteOnLink implements SingleMultiFactoryCommand RegexLeaf.spaceOneOrMore(), // new RegexLeaf("POSITION", "(right|left|top|bottom)?"), // RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("o[nf]"), // + new RegexLeaf("(on|of)"), // RegexLeaf.spaceOneOrMore(), // new RegexLeaf("link"), // RegexLeaf.spaceZeroOrMore(), // diff --git a/src/net/sourceforge/plantuml/command/note/CommandFactoryTipOnEntity.java b/src/net/sourceforge/plantuml/command/note/CommandFactoryTipOnEntity.java index 285464df5..b2969fea3 100644 --- a/src/net/sourceforge/plantuml/command/note/CommandFactoryTipOnEntity.java +++ b/src/net/sourceforge/plantuml/command/note/CommandFactoryTipOnEntity.java @@ -90,7 +90,7 @@ public final class CommandFactoryTipOnEntity implements SingleMultiFactoryComman RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("TAGS1", Stereotag.pattern() + "?"), // RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("STEREO", "(\\<{2}.*\\>{2})?"), // + new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("TAGS2", Stereotag.pattern() + "?"), // RegexLeaf.spaceZeroOrMore(), // @@ -113,7 +113,7 @@ public final class CommandFactoryTipOnEntity implements SingleMultiFactoryComman RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("TAGS1", Stereotag.pattern() + "?"), // RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("STEREO", "(\\<{2}.*\\>{2})?"), // + new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("TAGS2", Stereotag.pattern() + "?"), // RegexLeaf.spaceZeroOrMore(), // diff --git a/src/net/sourceforge/plantuml/command/note/sequence/FactorySequenceNoteAcrossCommand.java b/src/net/sourceforge/plantuml/command/note/sequence/FactorySequenceNoteAcrossCommand.java index 2ada24ca9..5648fe989 100644 --- a/src/net/sourceforge/plantuml/command/note/sequence/FactorySequenceNoteAcrossCommand.java +++ b/src/net/sourceforge/plantuml/command/note/sequence/FactorySequenceNoteAcrossCommand.java @@ -71,7 +71,7 @@ public final class FactorySequenceNoteAcrossCommand implements SingleMultiFactor RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("STYLE", "(note|hnote|rnote)"), // RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("STEREO", "(\\<{2}.*\\>{2})?"), // + new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("ACROSS", "(accross|across)"), // RegexLeaf.spaceZeroOrMore(), // @@ -87,7 +87,7 @@ public final class FactorySequenceNoteAcrossCommand implements SingleMultiFactor RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("STYLE", "(note|hnote|rnote)"), // RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("STEREO", "(\\<{2}.*\\>{2})?"), // + new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("ACROSS", "(accross|across)"), // RegexLeaf.spaceZeroOrMore(), // diff --git a/src/net/sourceforge/plantuml/command/note/sequence/FactorySequenceNoteCommand.java b/src/net/sourceforge/plantuml/command/note/sequence/FactorySequenceNoteCommand.java index e259813a5..af8241a08 100644 --- a/src/net/sourceforge/plantuml/command/note/sequence/FactorySequenceNoteCommand.java +++ b/src/net/sourceforge/plantuml/command/note/sequence/FactorySequenceNoteCommand.java @@ -74,7 +74,7 @@ public final class FactorySequenceNoteCommand implements SingleMultiFactoryComma RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("STYLE", "(note|hnote|rnote)"), // RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("STEREO", "(\\<{2}.*\\>{2})?"), // + new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("POSITION", "(right|left|over)"), // RegexLeaf.spaceOneOrMore(), // @@ -92,7 +92,7 @@ public final class FactorySequenceNoteCommand implements SingleMultiFactoryComma RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("STYLE", "(note|hnote|rnote)"), // RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("STEREO", "(\\<{2}.*\\>{2})?"), // + new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("POSITION", "(right|left|over)"), // RegexLeaf.spaceOneOrMore(), // diff --git a/src/net/sourceforge/plantuml/command/note/sequence/FactorySequenceNoteOnArrowCommand.java b/src/net/sourceforge/plantuml/command/note/sequence/FactorySequenceNoteOnArrowCommand.java index cc9fcfc0d..497543f49 100644 --- a/src/net/sourceforge/plantuml/command/note/sequence/FactorySequenceNoteOnArrowCommand.java +++ b/src/net/sourceforge/plantuml/command/note/sequence/FactorySequenceNoteOnArrowCommand.java @@ -75,7 +75,7 @@ public final class FactorySequenceNoteOnArrowCommand implements SingleMultiFacto RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("STYLE", "(note|hnote|rnote)"), // RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("STEREO", "(\\<{2}.*\\>{2})?"), // + new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceOneOrMore(), // new RegexLeaf("POSITION", "(right|left|bottom|top)"), // RegexLeaf.spaceZeroOrMore(), // @@ -89,7 +89,7 @@ public final class FactorySequenceNoteOnArrowCommand implements SingleMultiFacto RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("STYLE", "(note|hnote|rnote)"), // RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("STEREO", "(\\<{2}.*\\>{2})?"), // + new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceOneOrMore(), // new RegexLeaf("POSITION", "(right|left|bottom|top)"), // RegexLeaf.spaceZeroOrMore(), // diff --git a/src/net/sourceforge/plantuml/command/note/sequence/FactorySequenceNoteOverSeveralCommand.java b/src/net/sourceforge/plantuml/command/note/sequence/FactorySequenceNoteOverSeveralCommand.java index b404b8ed4..629239785 100644 --- a/src/net/sourceforge/plantuml/command/note/sequence/FactorySequenceNoteOverSeveralCommand.java +++ b/src/net/sourceforge/plantuml/command/note/sequence/FactorySequenceNoteOverSeveralCommand.java @@ -73,7 +73,7 @@ public final class FactorySequenceNoteOverSeveralCommand implements SingleMultiF RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("STYLE", "(note|hnote|rnote)"), // RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("STEREO1", "(\\<{2}.*\\>{2})?"), // + new RegexLeaf("STEREO1", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("over"), // RegexLeaf.spaceOneOrMore(), // @@ -83,7 +83,7 @@ public final class FactorySequenceNoteOverSeveralCommand implements SingleMultiF RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("P2", "([%pLN_.@]+|[%g][^%g]+[%g])"), // RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("STEREO2", "(\\<{2}.*\\>{2})?"), // + new RegexLeaf("STEREO2", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceZeroOrMore(), // color().getRegex(), // RegexLeaf.spaceZeroOrMore(), // @@ -98,7 +98,7 @@ public final class FactorySequenceNoteOverSeveralCommand implements SingleMultiF RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("STYLE", "(note|hnote|rnote)"), // RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("STEREO1", "(\\<{2}.*\\>{2})?"), // + new RegexLeaf("STEREO1", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("over"), // RegexLeaf.spaceOneOrMore(), // @@ -108,7 +108,7 @@ public final class FactorySequenceNoteOverSeveralCommand implements SingleMultiF RegexLeaf.spaceZeroOrMore(), // new RegexLeaf("P2", "([%pLN_.@]+|[%g][^%g]+[%g])"), // RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("STEREO2", "(\\<{2}.*\\>{2})?"), // + new RegexLeaf("STEREO2", "(\\<\\<.*\\>\\>)?"), // RegexLeaf.spaceZeroOrMore(), // color().getRegex(), // RegexLeaf.spaceZeroOrMore(), // diff --git a/src/net/sourceforge/plantuml/command/regex/FoxSignature.java b/src/net/sourceforge/plantuml/command/regex/FoxSignature.java index d9f02b68b..ef4f70d4c 100644 --- a/src/net/sourceforge/plantuml/command/regex/FoxSignature.java +++ b/src/net/sourceforge/plantuml/command/regex/FoxSignature.java @@ -38,53 +38,101 @@ package net.sourceforge.plantuml.command.regex; public class FoxSignature { private static final long masks[] = new long[127]; + private static final long MASK_SPACES; + private static final long MASK_SPECIAL1; static { final String full = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0!\"#$%&\'()*+,-./:;<=>?@[\\]^_{|}~"; long m = 1L; + MASK_SPACES = m; + m = m << 1; + MASK_SPECIAL1 = m; + m = m << 1; for (int i = 0; i < full.length(); i++) { char ch = full.charAt(i); masks[ch] = m; if (ch >= 'A' && ch <= 'Z') { ch = (char) (ch + ('a' - 'A')); masks[ch] = m; - } + } else if (ch == '.' || ch == '=' || ch == '-' || ch == '~') + masks[ch] |= MASK_SPECIAL1; m = m << 1; } + masks[' '] = MASK_SPACES; + masks['\t'] = MASK_SPACES; + masks['\r'] = MASK_SPACES; + masks['\n'] = MASK_SPACES; + masks['\f'] = MASK_SPACES; + + } + + public static long getSpecialSpaces() { + return MASK_SPACES; + } + + public static long getSpecial1() { + return MASK_SPECIAL1; } public static void printMe() { - for (int i = 0; i < masks.length; i++) { + for (int i = 0; i < masks.length; i++) if (masks[i] > 0) { final char ch = (char) i; System.err.println("ch=" + ch + " " + masks[i]); } - } + } private static long getMask(char ch) { - if (ch < masks.length) { + if (ch < masks.length) return masks[ch]; - } + else if (ch == '\u00A0') + return MASK_SPACES; + return 0L; } - public static long getFoxSignature(String s) { + public static long getFoxSignatureFromRealString(String s) { + long result = 0; + for (int i = 0; i < s.length(); i++) + result = result | getMask(s.charAt(i)); + return result; + } + + public static long getFoxSignatureFromRegex(String s) { long result = 0; for (int i = 0; i < s.length(); i++) { - result = result | getMask(s.charAt(i)); + if (s.charAt(i) == '.') { + if (s.charAt(i + 1) == '+' || s.charAt(i + 1) == '*') + i++; + else + throw new IllegalArgumentException(s); + } else if (s.charAt(i) == '\\') { + if (s.charAt(i + 1) == 'b') + i++; + else if (Character.isLetterOrDigit(s.charAt(i + 1))) + throw new IllegalArgumentException(s); + } else { + if (i + 1 < s.length() && (s.charAt(i + 1) == '?' || s.charAt(i + 1) == '*')) { + i++; + continue; + } + result = result | getMask(s.charAt(i)); + if (i + 1 < s.length() && s.charAt(i + 1) == '+') { + i++; + } + } } return result; } public static String backToString(long check) { final StringBuilder sb = new StringBuilder(); - for (int i = 0; i < masks.length; i++) { + for (int i = 0; i < masks.length; i++) if (masks[i] != 0L && (check & masks[i]) != 0L) { final char ch = (char) i; sb.append(ch); } - } return sb.toString(); } diff --git a/src/net/sourceforge/plantuml/command/regex/RegexComposed.java b/src/net/sourceforge/plantuml/command/regex/RegexComposed.java index 02944446b..d88919ab7 100644 --- a/src/net/sourceforge/plantuml/command/regex/RegexComposed.java +++ b/src/net/sourceforge/plantuml/command/regex/RegexComposed.java @@ -41,14 +41,16 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import net.sourceforge.plantuml.StringLocated; public abstract class RegexComposed implements IRegex { - protected static final AtomicInteger nbCreateMatches = new AtomicInteger(); +// protected static final AtomicInteger nbCreateMatches = new AtomicInteger(); +// protected static final AtomicInteger vtot = new AtomicInteger(); +// protected static final AtomicInteger vescaped = new AtomicInteger(); + private final List partials; protected final List partials() { @@ -78,7 +80,7 @@ public abstract class RegexComposed implements IRegex { } public Map createPartialMatch(Iterator it) { - nbCreateMatches.incrementAndGet(); + // nbCreateMatches.incrementAndGet(); final Map result = new HashMap(); for (IRegex r : partials) result.putAll(r.createPartialMatch(it)); diff --git a/src/net/sourceforge/plantuml/command/regex/RegexConcat.java b/src/net/sourceforge/plantuml/command/regex/RegexConcat.java index 9863437a0..edc84c37e 100644 --- a/src/net/sourceforge/plantuml/command/regex/RegexConcat.java +++ b/src/net/sourceforge/plantuml/command/regex/RegexConcat.java @@ -35,34 +35,38 @@ */ package net.sourceforge.plantuml.command.regex; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; import java.util.concurrent.atomic.AtomicLong; -import net.sourceforge.plantuml.Log; import net.sourceforge.plantuml.StringLocated; public final class RegexConcat extends RegexComposed implements IRegex { - private static final ConcurrentMap cache = new ConcurrentHashMap(); private final AtomicLong foxRegex = new AtomicLong(-1L); private int limitSize; // private static final Set PRINTED2 = new HashSet<>(); public static void printCacheInfo() { - int nbCompiled = 0; - int nbInvoked = 0; - for (RegexConcat reg : cache.values()) { - if (reg.isCompiled()) - nbCompiled++; - - if (reg.invoked()) - nbInvoked++; - - } - Log.info("Regex total/invoked/compiled " + cache.size() + "/" + nbInvoked + "/" + nbCompiled); - Log.info("Matches created " + nbCreateMatches.get()); +// if (OptionFlags.getInstance().isVerbose()) +// synchronized (cache) { +// +// final NumberFormat nf = NumberFormat.getInstance(Locale.US); +// +// int nbCompiled = 0; +// int nbInvoked = 0; +// for (RegexConcat reg : cache.values()) { +// if (reg.isCompiled()) +// nbCompiled++; +// +// if (reg.invoked()) +// nbInvoked++; +// +// } +// Log.info("Regex total/invoked/compiled " + nf.format(cache.size()) + "/" + nf.format(nbInvoked) + "/" +// + nf.format(nbCompiled)); +// Log.info("Matches escaped " + nf.format(vescaped.get()) + "/" + nf.format(vtot.get())); +// Log.info("Matches created " + nf.format(nbCreateMatches.get())); +// } } public RegexConcat(IRegex... partials) { @@ -70,7 +74,8 @@ public final class RegexConcat extends RegexComposed implements IRegex { } private long foxRegex() { - if (foxRegex.get() == -1L) { + final long result = foxRegex.get(); + if (result == -1L) { long tmp = 0L; for (int i = 1; i < partials().size() - 1; i++) { final IRegex part = partials().get(i); @@ -80,26 +85,27 @@ public final class RegexConcat extends RegexComposed implements IRegex { } } foxRegex.set(tmp); + return tmp; } - return foxRegex.get(); + return result; } public static RegexConcat build(String key, IRegex... partials) { - // return buildInternal(partials); - RegexConcat result = cache.get(key); - if (result == null) { - cache.putIfAbsent(key, buildInternal(partials)); - result = cache.get(key); - // System.err.println("cache size=" + cache.size()); - // } else { - // synchronized (PRINTED2) { - // if (PRINTED2.contains(key) == false) { - // System.err.println("if (key.equals(\"" + key + "\")) return - // buildInternal(partials);"); - // } - // PRINTED2.add(key); - } - return result; + return buildInternal(partials); +// RegexConcat result = cache.get(key); +// if (result == null) { +// cache.putIfAbsent(key, buildInternal(partials)); +// result = cache.get(key); +// // System.err.println("cache size=" + cache.size()); +// // } else { +// // synchronized (PRINTED2) { +// // if (PRINTED2.contains(key) == false) { +// // System.err.println("if (key.equals(\"" + key + "\")) return +// // buildInternal(partials);"); +// // } +// // PRINTED2.add(key); +// } +// return result; } private static RegexConcat buildInternal(IRegex... partials) { @@ -113,20 +119,35 @@ public final class RegexConcat extends RegexComposed implements IRegex { return foxRegex.get() != -1L; } +// static private final Set PRINTED = new HashSet<>(); +// static private final Set ZERO = new HashSet<>(); + @Override public boolean match(StringLocated s) { if (limitSize != 0 && s.getString().length() > limitSize) return false; + // vtot.incrementAndGet(); final long foxRegex = foxRegex(); +// synchronized (PRINTED) { +// final String full = getFullSlow(); +// final boolean added = PRINTED.add(full); +// if (added && foxRegex == 0L) { +// ZERO.add(full); +// System.err.println("PR " + ZERO.size() + "/" + PRINTED.size() + " " +// + FoxSignature.backToString(foxRegex) + " " + full); +// } +// } if (foxRegex != 0L) { final long foxLine = s.getFoxSignature(); final long check = foxRegex & foxLine; // System.err.println("r=" + getFullSlow() + " s=" + s + " line=" + foxLine + " // regex" + foxRegex + " " // + check + " <" + FoxSignature.backToString(check) + ">"); - if (check != foxRegex) + if (check != foxRegex) { + // vescaped.incrementAndGet(); return false; + } } return super.match(s); diff --git a/src/net/sourceforge/plantuml/command/regex/RegexLeaf.java b/src/net/sourceforge/plantuml/command/regex/RegexLeaf.java index 5126fcc0d..7b0c1b27f 100644 --- a/src/net/sourceforge/plantuml/command/regex/RegexLeaf.java +++ b/src/net/sourceforge/plantuml/command/regex/RegexLeaf.java @@ -41,6 +41,7 @@ import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.StringTokenizer; +import java.util.regex.Matcher; import java.util.regex.Pattern; import net.sourceforge.plantuml.StringLocated; @@ -95,9 +96,9 @@ public class RegexLeaf implements IRegex { } public int count() { - if (count == -1) { + if (count == -1) count = MyPattern.cmpile(pattern).matcher("").groupCount(); - } + return count; } @@ -107,9 +108,9 @@ public class RegexLeaf implements IRegex { final String group = it.next(); m.add(group); } - if (name == null) { + if (name == null) return Collections.emptyMap(); - } + return Collections.singletonMap(name, m); } @@ -121,63 +122,52 @@ public class RegexLeaf implements IRegex { throw new UnsupportedOperationException(); } - static private final Set UNKNOWN = new HashSet<>(); + // static private final Set UNKNOWN = new HashSet<>(); - static private final Pattern p1 = Pattern.compile("^[-0A-Za-z_!:@;/=,\"]+$"); - static private final Pattern p2 = Pattern.compile("^[-0A-Za-z_!:@;/=,\"]+\\?$"); - static private final Pattern p3 = Pattern - .compile("^\\(?[-0A-Za-z_!:@;/=\" ]+\\??(\\|[-0A-Za-z_!:@;/=,\" ]+\\??)+\\)?$"); + static private final Pattern p1 = Pattern.compile( + "^\\(?((?:[-0A-Za-z_!:@;/=,\" ][?+*]?|\\\\[b$(){}<>|*.+^\\[\\]][?+*]?|\\.\\*|\\.\\+)+)(?:\\)\\+|\\))?$"); - private static long getSignatureP3(String s) { + static private final Pattern p2 = Pattern.compile("^\\([-?a-z ]+(\\|[-?a-z ]+)+\\)$"); + + static private final Pattern p3 = Pattern.compile("^\\(?\\[[-=.~]+\\]\\+\\)?$"); + + private static long getSignatureP2(String s) { long result = -1L; for (StringTokenizer st = new StringTokenizer(s, "()|"); st.hasMoreTokens();) { final String val = st.nextToken(); - final long sig = FoxSignature.getFoxSignature(val.endsWith("?") ? val.substring(0, val.length() - 2) : val); - result = result & sig; + result = result & FoxSignature.getFoxSignatureFromRegex(val); } return result; } - public long getFoxSignatureNone() { - return 0; - } - public long getFoxSignature() { - if (p1.matcher(pattern).matches()) - return FoxSignature.getFoxSignature(pattern); - - if (p2.matcher(pattern).matches()) - return FoxSignature.getFoxSignature(pattern.substring(0, pattern.length() - 2)); - - if (p3.matcher(pattern).matches()) - return getSignatureP3(pattern); - - if (pattern.length() == 2 && pattern.startsWith("\\") && Character.isLetterOrDigit(pattern.charAt(1)) == false) - return FoxSignature.getFoxSignature(pattern.substring(1)); - - if (pattern.equals("\\<\\>") || pattern.equals("(\\<\\<.*\\>\\>)")) - return FoxSignature.getFoxSignature("<>"); - - if (pattern.equals("\\<-\\>")) - return FoxSignature.getFoxSignature("<->"); - - if (pattern.equals("(-+)")) - return FoxSignature.getFoxSignature("-"); - - if (pattern.equals("\\|+") || pattern.equals("\\|\\|")) - return FoxSignature.getFoxSignature("|"); - - if (pattern.equals("([*]+)")) - return FoxSignature.getFoxSignature("*"); - - if (pattern.equals("[%s]+") || pattern.equals("[%s]*")) + if (pattern.equals("[%s]+")) + return FoxSignature.getSpecialSpaces(); + if (pattern.equals("[%s]*")) return 0; + final String pattern2 = pattern.replaceAll("\\[%s\\][+*?]?|\\(\\[([^\\\\\\[\\]])+\\]\\)[+*?]?", ""); + + final Matcher m1 = p1.matcher(pattern2); + if (m1.matches()) + return FoxSignature.getFoxSignatureFromRegex(m1.group(1)); + + final Matcher m2 = p2.matcher(pattern2); + if (m2.matches()) + return getSignatureP2(pattern2); + + final Matcher m3 = p3.matcher(pattern2); + if (m3.matches()) + return FoxSignature.getSpecial1(); // synchronized (UNKNOWN) { -// final boolean changed = UNKNOWN.add(pattern); -// if (changed) -// System.err.println("unknow=" + pattern); -// +// final boolean changed = UNKNOWN.add(pattern2); +// if (changed) { +// if (pattern.equals(pattern2)) +// System.err.println("unknow=" + UNKNOWN.size() + " " + pattern); +// else +// System.err.println("unknow=" + UNKNOWN.size() + " " + pattern2 + " " + pattern); +// // Thread.dumpStack(); +// } // } return 0; } diff --git a/src/net/sourceforge/plantuml/compositediagram/CompositeDiagramFactory.java b/src/net/sourceforge/plantuml/compositediagram/CompositeDiagramFactory.java index 428665673..9dbeb6c80 100644 --- a/src/net/sourceforge/plantuml/compositediagram/CompositeDiagramFactory.java +++ b/src/net/sourceforge/plantuml/compositediagram/CompositeDiagramFactory.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.compositediagram; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -58,15 +57,12 @@ public class CompositeDiagramFactory extends PSystemCommandFactory { } @Override - protected List createCommands() { - final List cmds = new ArrayList<>(); + protected void initCommandsList(List cmds) { cmds.add(new CommandCreateBlock()); cmds.add(new CommandLinkBlock()); cmds.add(new CommandCreatePackageBlock()); cmds.add(new CommandEndPackageBlock()); CommonCommands.addCommonCommands1(cmds); - - return cmds; } @Override diff --git a/src/net/sourceforge/plantuml/creole/command/CommandCreoleImg.java b/src/net/sourceforge/plantuml/creole/command/CommandCreoleImg.java index c0817d6b5..8ce18fd89 100644 --- a/src/net/sourceforge/plantuml/creole/command/CommandCreoleImg.java +++ b/src/net/sourceforge/plantuml/creole/command/CommandCreoleImg.java @@ -61,22 +61,22 @@ public class CommandCreoleImg implements Command { public int matchingSize(String line) { final Matcher2 m = pattern.matcher(line); - if (m.find() == false) { + if (m.find() == false) return 0; - } + return m.group(1).length(); } public String executeAndGetRemaining(String line, StripeSimple stripe) { final Matcher2 m = pattern.matcher(line); - if (m.find() == false) { + if (m.find() == false) throw new IllegalStateException(); - } + String src = m.group(2); final double scale = Parser.getScale(m.group(3), 1); - if (src.toLowerCase().startsWith("src=")) { + if (src.toLowerCase().startsWith("src=")) src = src.substring(4); - } + src = StringUtils.eventuallyRemoveStartingAndEndingDoubleQuote(src, "\""); stripe.addImage(src, scale); return line.substring(m.group(1).length()); diff --git a/src/net/sourceforge/plantuml/cucadiagram/Display.java b/src/net/sourceforge/plantuml/cucadiagram/Display.java index 5facddcc6..dac2357a4 100644 --- a/src/net/sourceforge/plantuml/cucadiagram/Display.java +++ b/src/net/sourceforge/plantuml/cucadiagram/Display.java @@ -57,7 +57,6 @@ import net.sourceforge.plantuml.command.regex.Matcher2; import net.sourceforge.plantuml.command.regex.MyPattern; import net.sourceforge.plantuml.command.regex.Pattern2; import net.sourceforge.plantuml.creole.CreoleMode; -import net.sourceforge.plantuml.creole.Parser; import net.sourceforge.plantuml.creole.Sheet; import net.sourceforge.plantuml.creole.SheetBlock1; import net.sourceforge.plantuml.creole.SheetBlock2; diff --git a/src/net/sourceforge/plantuml/cucadiagram/Link.java b/src/net/sourceforge/plantuml/cucadiagram/Link.java index 2d3b7fd42..8d07b3636 100644 --- a/src/net/sourceforge/plantuml/cucadiagram/Link.java +++ b/src/net/sourceforge/plantuml/cucadiagram/Link.java @@ -518,16 +518,6 @@ public class Link extends WithLinkType implements Hideable, Removeable { } - private UmlDiagramType umlType; - - public void setUmlDiagramType(UmlDiagramType type) { - this.umlType = type; - } - - public UmlDiagramType getUmlDiagramType() { - return umlType; - } - private LinkConstraint linkConstraint; public void setLinkConstraint(LinkConstraint linkConstraint) { diff --git a/src/net/sourceforge/plantuml/cucadiagram/MethodsOrFieldsArea.java b/src/net/sourceforge/plantuml/cucadiagram/MethodsOrFieldsArea.java index 3391b4e50..c698ae156 100644 --- a/src/net/sourceforge/plantuml/cucadiagram/MethodsOrFieldsArea.java +++ b/src/net/sourceforge/plantuml/cucadiagram/MethodsOrFieldsArea.java @@ -44,7 +44,6 @@ import java.util.List; import net.sourceforge.plantuml.EmbeddedDiagram; import net.sourceforge.plantuml.ISkinParam; -import net.sourceforge.plantuml.ISkinSimple; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.awt.geom.XDimension2D; diff --git a/src/net/sourceforge/plantuml/descdiagram/DescriptionDiagramFactory.java b/src/net/sourceforge/plantuml/descdiagram/DescriptionDiagramFactory.java index be9046288..8009f13b4 100644 --- a/src/net/sourceforge/plantuml/descdiagram/DescriptionDiagramFactory.java +++ b/src/net/sourceforge/plantuml/descdiagram/DescriptionDiagramFactory.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.descdiagram; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -74,9 +73,7 @@ public class DescriptionDiagramFactory extends PSystemCommandFactory { } @Override - protected List createCommands() { - final List cmds = new ArrayList<>(); - + protected void initCommandsList(List cmds) { cmds.add(new CommandFootboxIgnored()); cmds.add(new CommandNamespaceSeparator()); cmds.add(new CommandRankDir()); @@ -126,8 +123,6 @@ public class DescriptionDiagramFactory extends PSystemCommandFactory { cmds.add(new CommandArchimate()); cmds.add(new CommandArchimateMultilines()); cmds.add(new CommandCreateDomain()); - - return cmds; } } diff --git a/src/net/sourceforge/plantuml/ebnf/ETileAlternation.java b/src/net/sourceforge/plantuml/ebnf/ETileAlternation.java index a906143ff..9af35f688 100644 --- a/src/net/sourceforge/plantuml/ebnf/ETileAlternation.java +++ b/src/net/sourceforge/plantuml/ebnf/ETileAlternation.java @@ -42,7 +42,6 @@ import net.sourceforge.plantuml.awt.geom.XDimension2D; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UTranslate; -import net.sourceforge.plantuml.ugraphic.color.HColor; public class ETileAlternation extends ETile { diff --git a/src/net/sourceforge/plantuml/ebnf/PSystemEbnfFactory.java b/src/net/sourceforge/plantuml/ebnf/PSystemEbnfFactory.java index 6193ae94e..ba6465895 100644 --- a/src/net/sourceforge/plantuml/ebnf/PSystemEbnfFactory.java +++ b/src/net/sourceforge/plantuml/ebnf/PSystemEbnfFactory.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.ebnf; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -52,9 +51,7 @@ public class PSystemEbnfFactory extends PSystemCommandFactory { } @Override - protected List createCommands() { - - final List cmds = new ArrayList<>(); + protected void initCommandsList(List cmds) { CommonCommands.addCommonCommands1(cmds); cmds.add(new CommandComment()); cmds.add(new CommandCommentMultilines2()); @@ -62,8 +59,6 @@ public class PSystemEbnfFactory extends PSystemCommandFactory { cmds.add(new CommandEBnfSingleLine()); cmds.add(new CommandEbnfMultilines()); // cmds.add(new CommandNoteMultilines()); - - return cmds; } @Override diff --git a/src/net/sourceforge/plantuml/flowdiagram/FlowDiagramFactory.java b/src/net/sourceforge/plantuml/flowdiagram/FlowDiagramFactory.java index b607bde25..fa473679c 100644 --- a/src/net/sourceforge/plantuml/flowdiagram/FlowDiagramFactory.java +++ b/src/net/sourceforge/plantuml/flowdiagram/FlowDiagramFactory.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.flowdiagram; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -56,11 +55,9 @@ public class FlowDiagramFactory extends PSystemCommandFactory { } @Override - protected List createCommands() { - final List cmds = new ArrayList<>(); + protected void initCommandsList(List cmds) { cmds.add(new CommandLineSimple()); cmds.add(new CommandLink()); - return cmds; } } diff --git a/src/net/sourceforge/plantuml/help/HelpFactory.java b/src/net/sourceforge/plantuml/help/HelpFactory.java index c5c904098..c43eb5bdf 100644 --- a/src/net/sourceforge/plantuml/help/HelpFactory.java +++ b/src/net/sourceforge/plantuml/help/HelpFactory.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.help; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -51,10 +50,7 @@ public class HelpFactory extends PSystemCommandFactory { } @Override - protected List createCommands() { - - final List cmds = new ArrayList<>(); - + protected void initCommandsList(List cmds) { cmds.add(new CommandHelp()); cmds.add(new CommandHelpColor()); cmds.add(new CommandHelpFont()); @@ -62,8 +58,6 @@ public class HelpFactory extends PSystemCommandFactory { cmds.add(new CommandHelpSkinparam()); cmds.add(new CommandHelpType()); cmds.add(new CommandHelpTheme()); - - return cmds; } } diff --git a/src/net/sourceforge/plantuml/math/LatexBuilder.java b/src/net/sourceforge/plantuml/math/LatexBuilder.java index f3f4eee28..590c41032 100644 --- a/src/net/sourceforge/plantuml/math/LatexBuilder.java +++ b/src/net/sourceforge/plantuml/math/LatexBuilder.java @@ -99,6 +99,7 @@ public class LatexBuilder implements ScientificEquation { this.icon = icon; } + @Override public BufferedImage getImage() { if (cache == null) { cache = new BufferedImage((int) (icon.getIconWidth() * scale), (int) (icon.getIconHeight() * scale), @@ -133,6 +134,11 @@ public class LatexBuilder implements ScientificEquation { return this; } + @Override + public double getScale() { + return scale; + } + } public String getSource() { diff --git a/src/net/sourceforge/plantuml/mindmap/CommandMindMapOrgmode.java b/src/net/sourceforge/plantuml/mindmap/CommandMindMapOrgmode.java index 8f8d8d13c..0f498f957 100644 --- a/src/net/sourceforge/plantuml/mindmap/CommandMindMapOrgmode.java +++ b/src/net/sourceforge/plantuml/mindmap/CommandMindMapOrgmode.java @@ -55,7 +55,7 @@ public class CommandMindMapOrgmode extends SingleLineCommand2 { static IRegex getRegexConcat() { return RegexConcat.build(CommandMindMapOrgmode.class.getName(), RegexLeaf.start(), // - new RegexLeaf("TYPE", "([ \t]*[*]+)"), // + new RegexLeaf("TYPE", "([ \t]*\\*+)"), // new RegexOptional(new RegexLeaf("BACKCOLOR", "\\[(#\\w+)\\]")), // new RegexLeaf("SHAPE", "(_)?"), // RegexLeaf.spaceOneOrMore(), // diff --git a/src/net/sourceforge/plantuml/mindmap/CommandMindMapOrgmodeMultiline.java b/src/net/sourceforge/plantuml/mindmap/CommandMindMapOrgmodeMultiline.java index a7b085e77..872aa42f6 100644 --- a/src/net/sourceforge/plantuml/mindmap/CommandMindMapOrgmodeMultiline.java +++ b/src/net/sourceforge/plantuml/mindmap/CommandMindMapOrgmodeMultiline.java @@ -60,7 +60,7 @@ public class CommandMindMapOrgmodeMultiline extends CommandMultilines2 createCommands() { - - final List cmds = new ArrayList<>(); + protected void initCommandsList(List cmds) { CommonCommands.addCommonCommands1(cmds); // cmds.add(new CommandMindMapTabulation()); cmds.add(new CommandRankDir()); @@ -64,8 +61,6 @@ public class MindMapDiagramFactory extends PSystemCommandFactory { cmds.add(new CommandMindMapRoot()); cmds.add(new CommandMindMapPlus()); cmds.add(new CommandMindMapDirection()); - - return cmds; } @Override diff --git a/src/net/sourceforge/plantuml/nwdiag/NwDiagramFactory.java b/src/net/sourceforge/plantuml/nwdiag/NwDiagramFactory.java index 9a70b4fcd..6bb75eb06 100644 --- a/src/net/sourceforge/plantuml/nwdiag/NwDiagramFactory.java +++ b/src/net/sourceforge/plantuml/nwdiag/NwDiagramFactory.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.nwdiag; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -58,9 +57,7 @@ public class NwDiagramFactory extends PSystemCommandFactory { } @Override - protected List createCommands() { - - final List cmds = new ArrayList<>(); + protected void initCommandsList(List cmds) { CommonCommands.addCommonCommands1(cmds); cmds.add(new CommandNwDiagInit()); cmds.add(new CommandComment()); @@ -71,7 +68,6 @@ public class NwDiagramFactory extends PSystemCommandFactory { cmds.add(new CommandProperty()); cmds.add(new CommandEndSomething()); cmds.add(new CommandFootboxIgnored()); - return cmds; } } diff --git a/src/net/sourceforge/plantuml/project/GanttDiagramFactory.java b/src/net/sourceforge/plantuml/project/GanttDiagramFactory.java index de79dc195..725266a07 100644 --- a/src/net/sourceforge/plantuml/project/GanttDiagramFactory.java +++ b/src/net/sourceforge/plantuml/project/GanttDiagramFactory.java @@ -35,9 +35,7 @@ */ package net.sourceforge.plantuml.project; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.List; import java.util.Map; @@ -81,27 +79,25 @@ import net.sourceforge.plantuml.style.CommandStyleMultilinesCSS; public class GanttDiagramFactory extends PSystemCommandFactory { static private final List subjects() { - return Arrays.asList(new SubjectTask(), new SubjectProject(), new SubjectDayOfWeek(), - new SubjectDayAsDate(), new SubjectDaysAsDates(), new SubjectResource(), new SubjectToday(), - new SubjectSeparator()); + return Arrays.asList(SubjectTask.ME, SubjectProject.ME, SubjectDayOfWeek.ME, SubjectDayAsDate.ME, + SubjectDaysAsDates.ME, SubjectResource.ME, SubjectToday.ME, SubjectSeparator.ME); } - public GanttDiagramFactory(DiagramType type) { - super(type); + public GanttDiagramFactory() { + super(DiagramType.GANTT); } @Override - protected List createCommands() { - final List cmds = new ArrayList<>(); + protected void initCommandsList(List cmds) { CommonCommands.addTitleCommands(cmds); CommonCommands.addCommonCommands2(cmds); - cmds.add(new CommandStyleMultilinesCSS()); - cmds.add(new CommandStyleImport()); + cmds.add(CommandStyleMultilinesCSS.ME); + cmds.add(CommandStyleImport.ME); - cmds.add(new CommandNope()); + cmds.add(CommandNope.ME); - cmds.addAll(getLanguageCommands()); + addLanguageCommands(cmds); cmds.add(new CommandGanttArrow()); cmds.add(new CommandGanttArrow2()); @@ -119,48 +115,32 @@ public class GanttDiagramFactory extends PSystemCommandFactory { cmds.add(new CommandLabelOnColumn()); cmds.add(new CommandHideResourceName()); cmds.add(new CommandHideResourceFootbox()); - - return cmds; } - static private final Collection cache = new ArrayList<>(); + private void addLanguageCommands(List cmd) { + for (Subject subject : subjects()) + for (SentenceSimple sentenceA : subject.getSentences()) { + cmd.add(NaturalCommand.create(sentenceA)); + for (SentenceSimple sentenceB : subject.getSentences()) { + final String signatureA = sentenceA.getSignature(); + final String signatureB = sentenceB.getSignature(); + if (signatureA.equals(signatureB) == false) + cmd.add(NaturalCommand.create(new SentenceAnd(sentenceA, sentenceB))); - public static void clearCache() { - cache.clear(); - } - - private static Collection getLanguageCommands() { - // Useless synchronized now - synchronized (cache) { - if (cache.size() == 0) { - - for (Subject subject : subjects()) - for (SentenceSimple sentenceA : subject.getSentences()) { - cache.add(NaturalCommand.create(sentenceA)); - for (SentenceSimple sentenceB : subject.getSentences()) { - final String signatureA = sentenceA.getSignature(); - final String signatureB = sentenceB.getSignature(); - if (signatureA.equals(signatureB) == false) - cache.add(NaturalCommand.create(new SentenceAnd(sentenceA, sentenceB))); - - } - } - - for (Subject subject : subjects()) - for (SentenceSimple sentenceA : subject.getSentences()) - for (SentenceSimple sentenceB : subject.getSentences()) - for (SentenceSimple sentenceC : subject.getSentences()) { - final String signatureA = sentenceA.getSignature(); - final String signatureB = sentenceB.getSignature(); - final String signatureC = sentenceC.getSignature(); - if (signatureA.equals(signatureB) == false && signatureA.equals(signatureC) == false - && signatureC.equals(signatureB) == false) - cache.add( - NaturalCommand.create(new SentenceAndAnd(sentenceA, sentenceB, sentenceC))); - } + } } - } - return cache; + + for (Subject subject : subjects()) + for (SentenceSimple sentenceA : subject.getSentences()) + for (SentenceSimple sentenceB : subject.getSentences()) + for (SentenceSimple sentenceC : subject.getSentences()) { + final String signatureA = sentenceA.getSignature(); + final String signatureB = sentenceB.getSignature(); + final String signatureC = sentenceC.getSignature(); + if (signatureA.equals(signatureB) == false && signatureA.equals(signatureC) == false + && signatureC.equals(signatureB) == false) + cmd.add(NaturalCommand.create(new SentenceAndAnd(sentenceA, sentenceB, sentenceC))); + } } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SentenceDisplayOnSameRowAs.java b/src/net/sourceforge/plantuml/project/lang/SentenceDisplayOnSameRowAs.java index 210c276e0..f60115519 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentenceDisplayOnSameRowAs.java +++ b/src/net/sourceforge/plantuml/project/lang/SentenceDisplayOnSameRowAs.java @@ -42,7 +42,7 @@ import net.sourceforge.plantuml.project.core.Task; public class SentenceDisplayOnSameRowAs extends SentenceSimple { public SentenceDisplayOnSameRowAs() { - super(new SubjectTask(), Verbs.displayOnSameRowAs(), new ComplementNamed()); + super(SubjectTask.ME, Verbs.displayOnSameRowAs, new ComplementNamed()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SentenceEnds.java b/src/net/sourceforge/plantuml/project/lang/SentenceEnds.java index dd21d6bfb..9ae927895 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentenceEnds.java +++ b/src/net/sourceforge/plantuml/project/lang/SentenceEnds.java @@ -45,7 +45,7 @@ import net.sourceforge.plantuml.project.core.TaskInstant; public class SentenceEnds extends SentenceSimple { public SentenceEnds() { - super(new SubjectTask(), Verbs.ends(), new ComplementBeforeOrAfterOrAtTaskStartOrEnd()); + super(SubjectTask.ME, Verbs.ends, new ComplementBeforeOrAfterOrAtTaskStartOrEnd()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SentenceHappens.java b/src/net/sourceforge/plantuml/project/lang/SentenceHappens.java index 75d48ee13..030cd4e85 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentenceHappens.java +++ b/src/net/sourceforge/plantuml/project/lang/SentenceHappens.java @@ -44,7 +44,7 @@ import net.sourceforge.plantuml.project.core.TaskInstant; public class SentenceHappens extends SentenceSimple { public SentenceHappens() { - super(new SubjectTask(), Verbs.happens(), new ComplementBeforeOrAfterOrAtTaskStartOrEnd()); + super(SubjectTask.ME, Verbs.happens, new ComplementBeforeOrAfterOrAtTaskStartOrEnd()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SentenceHappensDate.java b/src/net/sourceforge/plantuml/project/lang/SentenceHappensDate.java index 0f7ca70dd..574011ccc 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentenceHappensDate.java +++ b/src/net/sourceforge/plantuml/project/lang/SentenceHappensDate.java @@ -44,7 +44,7 @@ import net.sourceforge.plantuml.project.time.Day; public class SentenceHappensDate extends SentenceSimple { public SentenceHappensDate() { - super(new SubjectTask(), Verbs.happens(), new ComplementDate()); + super(SubjectTask.ME, Verbs.happens, new ComplementDate()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SentenceIsColored.java b/src/net/sourceforge/plantuml/project/lang/SentenceIsColored.java index ef8c08201..315a35ff1 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentenceIsColored.java +++ b/src/net/sourceforge/plantuml/project/lang/SentenceIsColored.java @@ -42,7 +42,7 @@ import net.sourceforge.plantuml.project.core.Task; public class SentenceIsColored extends SentenceSimple { public SentenceIsColored() { - super(new SubjectTask(), Verbs.isColored(), new ComplementInColors()); + super(SubjectTask.ME, Verbs.isColored, new ComplementInColors()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SentenceIsColoredForCompletion.java b/src/net/sourceforge/plantuml/project/lang/SentenceIsColoredForCompletion.java index fa9738960..3bc4689b3 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentenceIsColoredForCompletion.java +++ b/src/net/sourceforge/plantuml/project/lang/SentenceIsColoredForCompletion.java @@ -42,7 +42,7 @@ import net.sourceforge.plantuml.project.core.Task; public class SentenceIsColoredForCompletion extends SentenceSimple { public SentenceIsColoredForCompletion() { - super(new SubjectTask(), Verbs.isColoredForCompletion(), new ComplementInColorsFromTo()); + super(SubjectTask.ME, Verbs.isColoredForCompletion, new ComplementInColorsFromTo()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SentenceIsDeleted.java b/src/net/sourceforge/plantuml/project/lang/SentenceIsDeleted.java index 5dc7929b7..6444d6430 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentenceIsDeleted.java +++ b/src/net/sourceforge/plantuml/project/lang/SentenceIsDeleted.java @@ -42,7 +42,7 @@ import net.sourceforge.plantuml.project.core.Task; public class SentenceIsDeleted extends SentenceSimple { public SentenceIsDeleted() { - super(new SubjectTask(), Verbs.isDeleted(), new ComplementEmpty()); + super(SubjectTask.ME, Verbs.isDeleted, new ComplementEmpty()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SentenceIsForTask.java b/src/net/sourceforge/plantuml/project/lang/SentenceIsForTask.java index 653bc6f94..0e9d124f3 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentenceIsForTask.java +++ b/src/net/sourceforge/plantuml/project/lang/SentenceIsForTask.java @@ -43,7 +43,7 @@ import net.sourceforge.plantuml.project.core.Task; public class SentenceIsForTask extends SentenceSimple { public SentenceIsForTask() { - super(new SubjectTask(), Verbs.is(), new ComplementCompleted()); + super(SubjectTask.ME, Verbs.is, new ComplementCompleted()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SentenceLasts.java b/src/net/sourceforge/plantuml/project/lang/SentenceLasts.java index 23094bfe9..c7ca8ea46 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentenceLasts.java +++ b/src/net/sourceforge/plantuml/project/lang/SentenceLasts.java @@ -43,7 +43,7 @@ import net.sourceforge.plantuml.project.core.Task; public class SentenceLasts extends SentenceSimple { public SentenceLasts() { - super(new SubjectTask(), Verbs.lasts(), new ComplementSeveralDays()); + super(SubjectTask.ME, Verbs.lasts, new ComplementSeveralDays()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SentenceLinksTo.java b/src/net/sourceforge/plantuml/project/lang/SentenceLinksTo.java index 947b8253f..a5d0238d8 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentenceLinksTo.java +++ b/src/net/sourceforge/plantuml/project/lang/SentenceLinksTo.java @@ -43,7 +43,7 @@ import net.sourceforge.plantuml.project.core.Task; public class SentenceLinksTo extends SentenceSimple { public SentenceLinksTo() { - super(new SubjectTask(), Verbs.linksTo(), new ComplementUrl()); + super(SubjectTask.ME, Verbs.linksTo, new ComplementUrl()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SentenceOccurs.java b/src/net/sourceforge/plantuml/project/lang/SentenceOccurs.java index baf61eb56..cc455a553 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentenceOccurs.java +++ b/src/net/sourceforge/plantuml/project/lang/SentenceOccurs.java @@ -45,7 +45,7 @@ import net.sourceforge.plantuml.project.core.TaskInstant; public class SentenceOccurs extends SentenceSimple { public SentenceOccurs() { - super(new SubjectTask(), Verbs.occurs(), new ComplementFromTo()); + super(SubjectTask.ME, Verbs.occurs, new ComplementFromTo()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SentencePausesDate.java b/src/net/sourceforge/plantuml/project/lang/SentencePausesDate.java index d84895da9..41904b5c8 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentencePausesDate.java +++ b/src/net/sourceforge/plantuml/project/lang/SentencePausesDate.java @@ -43,7 +43,7 @@ import net.sourceforge.plantuml.project.time.Day; public class SentencePausesDate extends SentenceSimple { public SentencePausesDate() { - super(new SubjectTask(), Verbs.pauses(), new ComplementDate()); + super(SubjectTask.ME, Verbs.pauses, new ComplementDate()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SentencePausesDates.java b/src/net/sourceforge/plantuml/project/lang/SentencePausesDates.java index 6e22e0cc8..95082bca5 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentencePausesDates.java +++ b/src/net/sourceforge/plantuml/project/lang/SentencePausesDates.java @@ -44,7 +44,7 @@ import net.sourceforge.plantuml.project.time.Day; public class SentencePausesDates extends SentenceSimple { public SentencePausesDates() { - super(new SubjectTask(), Verbs.pauses(), new ComplementDates()); + super(SubjectTask.ME, Verbs.pauses, new ComplementDates()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SentencePausesDayOfWeek.java b/src/net/sourceforge/plantuml/project/lang/SentencePausesDayOfWeek.java index 4e1425928..3ccde27a1 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentencePausesDayOfWeek.java +++ b/src/net/sourceforge/plantuml/project/lang/SentencePausesDayOfWeek.java @@ -43,7 +43,7 @@ import net.sourceforge.plantuml.project.time.DayOfWeek; public class SentencePausesDayOfWeek extends SentenceSimple { public SentencePausesDayOfWeek() { - super(new SubjectTask(), Verbs.pauses(), new ComplementDayOfWeek()); + super(SubjectTask.ME, Verbs.pauses, new ComplementDayOfWeek()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SentenceTaskEndsAbsolute.java b/src/net/sourceforge/plantuml/project/lang/SentenceTaskEndsAbsolute.java index 0da1d9e40..9b566df3c 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentenceTaskEndsAbsolute.java +++ b/src/net/sourceforge/plantuml/project/lang/SentenceTaskEndsAbsolute.java @@ -43,7 +43,7 @@ import net.sourceforge.plantuml.project.time.Day; public class SentenceTaskEndsAbsolute extends SentenceSimple { public SentenceTaskEndsAbsolute() { - super(new SubjectTask(), Verbs.ends2(), new ComplementDate()); + super(SubjectTask.ME, Verbs.ends2, new ComplementDate()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SentenceTaskStarts.java b/src/net/sourceforge/plantuml/project/lang/SentenceTaskStarts.java index 60e673c0f..fd25459c2 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentenceTaskStarts.java +++ b/src/net/sourceforge/plantuml/project/lang/SentenceTaskStarts.java @@ -46,7 +46,7 @@ import net.sourceforge.plantuml.ugraphic.color.HColor; public class SentenceTaskStarts extends SentenceSimple { public SentenceTaskStarts() { - super(new SubjectTask(), Verbs.starts2(), new ComplementBeforeOrAfterOrAtTaskStartOrEnd()); + super(SubjectTask.ME, Verbs.starts2, new ComplementBeforeOrAfterOrAtTaskStartOrEnd()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SentenceTaskStartsAbsolute.java b/src/net/sourceforge/plantuml/project/lang/SentenceTaskStartsAbsolute.java index a9ea5b1e9..afc561584 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentenceTaskStartsAbsolute.java +++ b/src/net/sourceforge/plantuml/project/lang/SentenceTaskStartsAbsolute.java @@ -43,7 +43,7 @@ import net.sourceforge.plantuml.project.time.Day; public class SentenceTaskStartsAbsolute extends SentenceSimple { public SentenceTaskStartsAbsolute() { - super(new SubjectTask(), Verbs.starts3(), new ComplementDate()); + super(SubjectTask.ME, Verbs.starts3, new ComplementDate()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SentenceTaskStartsWithColor.java b/src/net/sourceforge/plantuml/project/lang/SentenceTaskStartsWithColor.java index ed9c75f72..34ed3cea1 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentenceTaskStartsWithColor.java +++ b/src/net/sourceforge/plantuml/project/lang/SentenceTaskStartsWithColor.java @@ -46,7 +46,7 @@ import net.sourceforge.plantuml.ugraphic.color.HColor; public class SentenceTaskStartsWithColor extends SentenceSimple { public SentenceTaskStartsWithColor() { - super(new SubjectTask(), Verbs.starts2(), + super(SubjectTask.ME, Verbs.starts2, new PairOfSomething(new ComplementBeforeOrAfterOrAtTaskStartOrEnd(), new ComplementWithColorLink())); } diff --git a/src/net/sourceforge/plantuml/project/lang/SubjectDayAsDate.java b/src/net/sourceforge/plantuml/project/lang/SubjectDayAsDate.java index 00d175c69..4d26a7a92 100644 --- a/src/net/sourceforge/plantuml/project/lang/SubjectDayAsDate.java +++ b/src/net/sourceforge/plantuml/project/lang/SubjectDayAsDate.java @@ -51,13 +51,18 @@ import net.sourceforge.plantuml.ugraphic.color.HColor; public class SubjectDayAsDate implements Subject { + public static final Subject ME = new SubjectDayAsDate(); + + private SubjectDayAsDate() { + } + public Failable getMe(GanttDiagram project, RegexResult arg) { - if (arg.get("BDAY", 0) != null) { + if (arg.get("BDAY", 0) != null) return Failable.ok(resultB(arg)); - } - if (arg.get("ECOUNT", 0) != null) { + + if (arg.get("ECOUNT", 0) != null) return Failable.ok(resultE(project, arg)); - } + throw new IllegalStateException(); } @@ -81,7 +86,7 @@ public class SubjectDayAsDate implements Subject { class Close extends SentenceSimple { public Close() { - super(SubjectDayAsDate.this, Verbs.isOrAre(), new ComplementClose()); + super(SubjectDayAsDate.this, Verbs.isOrAre, new ComplementClose()); } @Override @@ -93,7 +98,7 @@ public class SubjectDayAsDate implements Subject { class Open extends SentenceSimple { public Open() { - super(SubjectDayAsDate.this, Verbs.isOrAre(), new ComplementOpen()); + super(SubjectDayAsDate.this, Verbs.isOrAre, new ComplementOpen()); } @Override @@ -106,7 +111,7 @@ public class SubjectDayAsDate implements Subject { class InColor extends SentenceSimple { public InColor() { - super(SubjectDayAsDate.this, Verbs.isOrAre(), new ComplementInColors2()); + super(SubjectDayAsDate.this, Verbs.isOrAre, new ComplementInColors2()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SubjectDayOfWeek.java b/src/net/sourceforge/plantuml/project/lang/SubjectDayOfWeek.java index 1f2d5307e..181ecad19 100644 --- a/src/net/sourceforge/plantuml/project/lang/SubjectDayOfWeek.java +++ b/src/net/sourceforge/plantuml/project/lang/SubjectDayOfWeek.java @@ -49,6 +49,11 @@ import net.sourceforge.plantuml.ugraphic.color.HColor; public class SubjectDayOfWeek implements Subject { + public static final Subject ME = new SubjectDayOfWeek(); + + private SubjectDayOfWeek() { + } + public IRegex toRegex() { return new RegexLeaf("SUBJECT", "(" + DayOfWeek.getRegexString() + ")"); } @@ -64,7 +69,7 @@ public class SubjectDayOfWeek implements Subject { class AreOpen extends SentenceSimple { public AreOpen() { - super(SubjectDayOfWeek.this, Verbs.are(), new ComplementOpen()); + super(SubjectDayOfWeek.this, Verbs.are, new ComplementOpen()); } @Override @@ -78,7 +83,7 @@ public class SubjectDayOfWeek implements Subject { class AreClose extends SentenceSimple { public AreClose() { - super(SubjectDayOfWeek.this, Verbs.are(), new ComplementClose()); + super(SubjectDayOfWeek.this, Verbs.are, new ComplementClose()); } @Override @@ -93,7 +98,7 @@ public class SubjectDayOfWeek implements Subject { class InColor extends SentenceSimple { public InColor() { - super(SubjectDayOfWeek.this, Verbs.isOrAre(), new ComplementInColors2()); + super(SubjectDayOfWeek.this, Verbs.isOrAre, new ComplementInColors2()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SubjectDaysAsDates.java b/src/net/sourceforge/plantuml/project/lang/SubjectDaysAsDates.java index 88f6a177d..37a605ce2 100644 --- a/src/net/sourceforge/plantuml/project/lang/SubjectDaysAsDates.java +++ b/src/net/sourceforge/plantuml/project/lang/SubjectDaysAsDates.java @@ -52,6 +52,11 @@ import net.sourceforge.plantuml.ugraphic.color.HColor; public class SubjectDaysAsDates implements Subject { + public static final Subject ME = new SubjectDaysAsDates(); + + private SubjectDaysAsDates() { + } + public IRegex toRegex() { return new RegexOr(toRegexB(), toRegexE(), andRegex(), thenRegex()); } @@ -153,7 +158,7 @@ public class SubjectDaysAsDates implements Subject { class Close extends SentenceSimple { public Close() { - super(SubjectDaysAsDates.this, Verbs.isOrAre(), new ComplementClose()); + super(SubjectDaysAsDates.this, Verbs.isOrAre, new ComplementClose()); } @Override @@ -169,7 +174,7 @@ public class SubjectDaysAsDates implements Subject { class Open extends SentenceSimple { public Open() { - super(SubjectDaysAsDates.this, Verbs.isOrAre(), new ComplementOpen()); + super(SubjectDaysAsDates.this, Verbs.isOrAre, new ComplementOpen()); } @Override @@ -186,7 +191,7 @@ public class SubjectDaysAsDates implements Subject { class InColor extends SentenceSimple { public InColor() { - super(SubjectDaysAsDates.this, Verbs.isOrAre(), new ComplementInColors2()); + super(SubjectDaysAsDates.this, Verbs.isOrAre, new ComplementInColors2()); } @Override @@ -204,7 +209,7 @@ public class SubjectDaysAsDates implements Subject { class Named extends SentenceSimple { public Named() { - super(SubjectDaysAsDates.this, Verbs.isOrAreNamed(), new ComplementNamed()); + super(SubjectDaysAsDates.this, Verbs.isOrAreNamed, new ComplementNamed()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SubjectLinks.java b/src/net/sourceforge/plantuml/project/lang/SubjectLinks.java index f35e5d0b5..6b72f9bf3 100644 --- a/src/net/sourceforge/plantuml/project/lang/SubjectLinks.java +++ b/src/net/sourceforge/plantuml/project/lang/SubjectLinks.java @@ -47,6 +47,10 @@ import net.sourceforge.plantuml.project.GanttDiagram; // Removed public class SubjectLinks implements Subject { + + private SubjectLinks() { + } + public IRegex toRegex() { return new RegexLeaf("SUBJECT", "links?"); @@ -63,7 +67,7 @@ public class SubjectLinks implements Subject { public class InColor extends SentenceSimple { public InColor() { - super(SubjectLinks.this, Verbs.areColored(), new ComplementInColors()); + super(SubjectLinks.this, Verbs.areColored, new ComplementInColors()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SubjectProject.java b/src/net/sourceforge/plantuml/project/lang/SubjectProject.java index 28502e3c2..d4045c7a2 100644 --- a/src/net/sourceforge/plantuml/project/lang/SubjectProject.java +++ b/src/net/sourceforge/plantuml/project/lang/SubjectProject.java @@ -48,6 +48,11 @@ import net.sourceforge.plantuml.project.time.Day; public class SubjectProject implements Subject { + public static final Subject ME = new SubjectProject(); + + private SubjectProject() { + } + public IRegex toRegex() { return new RegexLeaf("SUBJECT", "project"); } @@ -63,7 +68,7 @@ public class SubjectProject implements Subject { class Starts extends SentenceSimple { public Starts() { - super(SubjectProject.this, Verbs.starts(), new ComplementDate()); + super(SubjectProject.this, Verbs.starts, new ComplementDate()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SubjectResource.java b/src/net/sourceforge/plantuml/project/lang/SubjectResource.java index b583f6d03..213f31d23 100644 --- a/src/net/sourceforge/plantuml/project/lang/SubjectResource.java +++ b/src/net/sourceforge/plantuml/project/lang/SubjectResource.java @@ -52,6 +52,11 @@ import net.sourceforge.plantuml.project.time.DayOfWeek; public class SubjectResource implements Subject { + public static final Subject ME = new SubjectResource(); + + private SubjectResource() { + } + public Failable getMe(GanttDiagram project, RegexResult arg) { final String s = arg.get("RESOURCE", 0); return Failable.ok(project.getResource(s)); @@ -70,7 +75,7 @@ public class SubjectResource implements Subject { public class IsOffDate extends SentenceSimple { public IsOffDate() { - super(SubjectResource.this, Verbs.isOff(), new ComplementDate()); + super(SubjectResource.this, Verbs.isOff, new ComplementDate()); } @Override @@ -86,7 +91,7 @@ public class SubjectResource implements Subject { public class IsOffDates extends SentenceSimple { public IsOffDates() { - super(SubjectResource.this, Verbs.isOff(), new ComplementDates()); + super(SubjectResource.this, Verbs.isOff, new ComplementDates()); } @Override @@ -103,7 +108,7 @@ public class SubjectResource implements Subject { public class IsOffDayOfWeek extends SentenceSimple { public IsOffDayOfWeek() { - super(SubjectResource.this, Verbs.isOff(), new ComplementDayOfWeek()); + super(SubjectResource.this, Verbs.isOff, new ComplementDayOfWeek()); } @Override @@ -118,7 +123,7 @@ public class SubjectResource implements Subject { public class IsOnDate extends SentenceSimple { public IsOnDate() { - super(SubjectResource.this, Verbs.isOn(), new ComplementDate()); + super(SubjectResource.this, Verbs.isOn, new ComplementDate()); } @Override @@ -134,7 +139,7 @@ public class SubjectResource implements Subject { public class IsOnDates extends SentenceSimple { public IsOnDates() { - super(SubjectResource.this, Verbs.isOn(), new ComplementDates()); + super(SubjectResource.this, Verbs.isOn, new ComplementDates()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SubjectSeparator.java b/src/net/sourceforge/plantuml/project/lang/SubjectSeparator.java index 695e4e3e1..dc2552aed 100644 --- a/src/net/sourceforge/plantuml/project/lang/SubjectSeparator.java +++ b/src/net/sourceforge/plantuml/project/lang/SubjectSeparator.java @@ -49,6 +49,11 @@ import net.sourceforge.plantuml.project.time.Day; public class SubjectSeparator implements Subject { + public static final Subject ME = new SubjectSeparator(); + + private SubjectSeparator() { + } + public IRegex toRegex() { return new RegexLeaf("SUBJECT", "separator"); } @@ -64,7 +69,7 @@ public class SubjectSeparator implements Subject { class JustBefore extends SentenceSimple { public JustBefore() { - super(SubjectSeparator.this, Verbs.justBefore(), new ComplementDate()); + super(SubjectSeparator.this, Verbs.justBefore, new ComplementDate()); } @Override @@ -80,7 +85,7 @@ public class SubjectSeparator implements Subject { class JustAfter extends SentenceSimple { public JustAfter() { - super(SubjectSeparator.this, Verbs.justAfter(), new ComplementDate()); + super(SubjectSeparator.this, Verbs.justAfter, new ComplementDate()); } @Override @@ -96,7 +101,7 @@ public class SubjectSeparator implements Subject { class Just extends SentenceSimple { public Just() { - super(SubjectSeparator.this, Verbs.just(), new ComplementBeforeOrAfterOrAtTaskStartOrEnd()); + super(SubjectSeparator.this, Verbs.just, new ComplementBeforeOrAfterOrAtTaskStartOrEnd()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/SubjectTask.java b/src/net/sourceforge/plantuml/project/lang/SubjectTask.java index 2a8280bda..15f841206 100644 --- a/src/net/sourceforge/plantuml/project/lang/SubjectTask.java +++ b/src/net/sourceforge/plantuml/project/lang/SubjectTask.java @@ -50,6 +50,11 @@ import net.sourceforge.plantuml.project.core.Task; public class SubjectTask implements Subject { + public static final Subject ME = new SubjectTask(); + + private SubjectTask() { + } + public Failable getMe(GanttDiagram project, RegexResult arg) { final String s = arg.get("SUBJECT", 0); final String shortName = arg.get("SUBJECT", 1); diff --git a/src/net/sourceforge/plantuml/project/lang/SubjectToday.java b/src/net/sourceforge/plantuml/project/lang/SubjectToday.java index bea3c950b..2af64d0eb 100644 --- a/src/net/sourceforge/plantuml/project/lang/SubjectToday.java +++ b/src/net/sourceforge/plantuml/project/lang/SubjectToday.java @@ -50,6 +50,11 @@ import net.sourceforge.plantuml.project.time.Day; public class SubjectToday implements Subject { + public static final Subject ME = new SubjectToday(); + + private SubjectToday() { + } + public IRegex toRegex() { return new RegexConcat( // new RegexLeaf("today") // @@ -67,7 +72,7 @@ public class SubjectToday implements Subject { class InColor extends SentenceSimple { public InColor() { - super(SubjectToday.this, Verbs.isColored(), new ComplementInColors()); + super(SubjectToday.this, Verbs.isColored, new ComplementInColors()); } @Override @@ -84,7 +89,7 @@ public class SubjectToday implements Subject { class IsDate extends SentenceSimple { public IsDate() { - super(SubjectToday.this, Verbs.is(), new ComplementDate()); + super(SubjectToday.this, Verbs.is, new ComplementDate()); } @Override diff --git a/src/net/sourceforge/plantuml/project/lang/Verbs.java b/src/net/sourceforge/plantuml/project/lang/Verbs.java index 6bdddd416..7e513c310 100644 --- a/src/net/sourceforge/plantuml/project/lang/Verbs.java +++ b/src/net/sourceforge/plantuml/project/lang/Verbs.java @@ -43,128 +43,80 @@ import net.sourceforge.plantuml.command.regex.RegexOr; public class Verbs { - public static IRegex are() { - return new RegexLeaf("are"); - } + public static IRegex are = new RegexLeaf("are"); - public static IRegex areColored() { - return new RegexLeaf("are[%s]+colou?red"); - } + public static IRegex areColored = new RegexLeaf("are[%s]+colou?red"); - public static IRegex displayOnSameRowAs() { - return new RegexLeaf("displays?[%s]+on[%s]+same[%s]+row[%s]+as"); - } + public static IRegex displayOnSameRowAs = new RegexLeaf("displays?[%s]+on[%s]+same[%s]+row[%s]+as"); - public static IRegex ends() { - return new RegexLeaf("ends"); - } + public static IRegex ends = new RegexLeaf("ends"); - public static IRegex ends2() { - return new RegexLeaf("ends[%s]*(the[%s]*|on[%s]*|at[%s]*)*"); - } + public static IRegex ends2 = new RegexLeaf("ends[%s]*(the[%s]*|on[%s]*|at[%s]*)*"); - public static IRegex happens() { - return new RegexLeaf("happens?[%s]*(at[%s]*|the[%s]*|on[%s]*)*"); - } + public static IRegex happens = new RegexLeaf("happens?[%s]*(at[%s]*|the[%s]*|on[%s]*)*"); - public static IRegex pauses() { - return new RegexLeaf("pauses?[%s]*(at[%s]*|the[%s]*|on[%s]*|from[%s]*)*"); - } + public static IRegex pauses = new RegexLeaf("pauses?[%s]*(at[%s]*|the[%s]*|on[%s]*|from[%s]*)*"); - public static IRegex isDeleted() { - return new RegexLeaf("is[%s]+deleted"); - } + public static IRegex isDeleted = new RegexLeaf("is[%s]+deleted"); - public static IRegex is() { - return new RegexLeaf("is"); - } + public static IRegex is = new RegexLeaf("is"); - public static IRegex isColored() { - return new RegexLeaf("is[%s]+colou?red"); - } + public static IRegex isColored = new RegexLeaf("is[%s]+colou?red"); - public static IRegex isColoredForCompletion() { - return new RegexLeaf("is[%s]+colou?red[%s]+for[%s]+completion"); - } + public static IRegex isColoredForCompletion = new RegexLeaf("is[%s]+colou?red[%s]+for[%s]+completion"); - public static IRegex isOff() { - return new RegexConcat(new RegexLeaf("is"), // - RegexLeaf.spaceOneOrMore(), // - new RegexLeaf("off"), // - RegexLeaf.spaceOneOrMore(), // - new RegexOr(// - new RegexLeaf("on"), // - new RegexLeaf("for"), // - new RegexLeaf("the"), // - new RegexLeaf("at") // - )); - } + public static IRegex isOff = new RegexConcat(new RegexLeaf("is"), // + RegexLeaf.spaceOneOrMore(), // + new RegexLeaf("off"), // + RegexLeaf.spaceOneOrMore(), // + new RegexOr(// + new RegexLeaf("on"), // + new RegexLeaf("for"), // + new RegexLeaf("the"), // + new RegexLeaf("at") // + )); - public static IRegex isOn() { - return new RegexConcat(new RegexLeaf("is"), // - RegexLeaf.spaceOneOrMore(), // - new RegexLeaf("on"), // - RegexLeaf.spaceOneOrMore(), // - new RegexOr(// - new RegexLeaf("on"), // - new RegexLeaf("for"), // - new RegexLeaf("the"), // - new RegexLeaf("at") // - ) // - ); - } + public static IRegex isOn = new RegexConcat(new RegexLeaf("is"), // + RegexLeaf.spaceOneOrMore(), // + new RegexLeaf("on"), // + RegexLeaf.spaceOneOrMore(), // + new RegexOr(// + new RegexLeaf("on"), // + new RegexLeaf("for"), // + new RegexLeaf("the"), // + new RegexLeaf("at") // + ) // + ); - public static IRegex isOrAre() { - return new RegexLeaf("(is|are)"); - } + public static IRegex isOrAre = new RegexLeaf("(is|are)"); - public static IRegex isOrAreNamed() { - return new RegexLeaf("(is|are)[%s]+named"); - } + public static IRegex isOrAreNamed = new RegexLeaf("(is|are)[%s]+named"); - public static IRegex lasts() { - return new RegexLeaf("(lasts|requires)"); - } + public static IRegex lasts = new RegexLeaf("(lasts|requires)"); - public static IRegex linksTo() { - return new RegexLeaf("links to"); - } + public static IRegex linksTo = new RegexLeaf("links to"); - public static IRegex occurs() { - return new RegexLeaf("occurs?"); - } + public static IRegex occurs = new RegexLeaf("occurs?"); - public static IRegex starts3() { - return new RegexLeaf("starts[%s]*(the[%s]*|on[%s]*|at[%s]*)*"); - } + public static IRegex starts3 = new RegexLeaf("starts[%s]*(the[%s]*|on[%s]*|at[%s]*)*"); - public static IRegex starts2() { - return new RegexLeaf("starts"); - } + public static IRegex starts2 = new RegexLeaf("starts"); - public static IRegex starts() { - return new RegexConcat(new RegexLeaf("start"), // - new RegexOptional(new RegexLeaf("s")), // - RegexLeaf.spaceZeroOrMore(), // - new RegexOptional(new RegexOr(// - new RegexLeaf("on"), // - new RegexLeaf("for"), // - new RegexLeaf("the"), // - new RegexLeaf("at") // - )) // - ); - } + public static IRegex starts = new RegexConcat(new RegexLeaf("start"), // + new RegexOptional(new RegexLeaf("s")), // + RegexLeaf.spaceZeroOrMore(), // + new RegexOptional(new RegexOr(// + new RegexLeaf("on"), // + new RegexLeaf("for"), // + new RegexLeaf("the"), // + new RegexLeaf("at") // + )) // + ); - public static IRegex just() { - return new RegexLeaf("just"); - } + public static IRegex just = new RegexLeaf("just"); - public static IRegex justBefore() { - return new RegexLeaf("just[%s]*before"); - } + public static IRegex justBefore = new RegexLeaf("just[%s]*before"); - public static IRegex justAfter() { - return new RegexLeaf("just[%s]*after"); - } + public static IRegex justAfter = new RegexLeaf("just[%s]*after"); } diff --git a/src/net/sourceforge/plantuml/regex/PSystemRegex.java b/src/net/sourceforge/plantuml/regex/PSystemRegex.java index 0f19fae35..31d054546 100644 --- a/src/net/sourceforge/plantuml/regex/PSystemRegex.java +++ b/src/net/sourceforge/plantuml/regex/PSystemRegex.java @@ -150,12 +150,12 @@ public class PSystemRegex extends TitledDiagram { public CommandExecutionResult addBlocLines(BlocLines from) { final CharIterator it = new CharIteratorImpl(from); final List parsed1 = RegexExpression.parse(it); - System.err.println("parsed1=" + parsed1); + // System.err.println("parsed1=" + parsed1); final List parsed2 = addImplicitConcatenation(parsed1); - System.err.println("parsed2=" + parsed2); + // System.err.println("parsed2=" + parsed2); final ShuntingYard shuntingYard = new ShuntingYard(parsed2.iterator()); final List result = shuntingYard.getOuputQueue(); - System.err.println("result=" + result); + // System.err.println("result=" + result); for (ReToken token : result) if (token.getType() == ReTokenType.SIMPLE_CHAR) push(token, Symbol.TERMINAL_STRING1); @@ -171,11 +171,11 @@ public class PSystemRegex extends TitledDiagram { concatenation(); else if (token.getType() == ReTokenType.ALTERNATIVE) alternation(); - else if (token.getType() == ReTokenType.QUANTIFIER && token.getData().equals("*")) + else if (token.getType() == ReTokenType.QUANTIFIER && token.getData().startsWith("*")) repetitionZeroOrMore(false); - else if (token.getType() == ReTokenType.QUANTIFIER && token.getData().equals("+")) + else if (token.getType() == ReTokenType.QUANTIFIER && token.getData().startsWith("+")) repetitionOneOrMore(); - else if (token.getType() == ReTokenType.QUANTIFIER && token.getData().equals("?")) + else if (token.getType() == ReTokenType.QUANTIFIER && token.getData().startsWith("?")) optional(); else throw new UnsupportedOperationException(token.toString()); diff --git a/src/net/sourceforge/plantuml/regex/PSystemRegexFactory.java b/src/net/sourceforge/plantuml/regex/PSystemRegexFactory.java index 82700bc70..228423407 100644 --- a/src/net/sourceforge/plantuml/regex/PSystemRegexFactory.java +++ b/src/net/sourceforge/plantuml/regex/PSystemRegexFactory.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.regex; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -52,13 +51,9 @@ public class PSystemRegexFactory extends PSystemCommandFactory { } @Override - protected List createCommands() { - - final List cmds = new ArrayList<>(); + protected void initCommandsList(List cmds) { CommonCommands.addCommonCommands1(cmds); cmds.add(new CommandRegexfSingleLine()); - - return cmds; } @Override diff --git a/src/net/sourceforge/plantuml/regex/RegexExpression.java b/src/net/sourceforge/plantuml/regex/RegexExpression.java index c87777587..a15ff9fb2 100644 --- a/src/net/sourceforge/plantuml/regex/RegexExpression.java +++ b/src/net/sourceforge/plantuml/regex/RegexExpression.java @@ -98,6 +98,16 @@ public class RegexExpression { it.next(); final StringBuilder result = new StringBuilder(); result.append(current0); + if (it.peek(0) == '?' && it.peek(1) == ':') { + it.next(); + it.next(); + result.append("?:"); + } + if (it.peek(0) == '?' && it.peek(1) == '!') { + it.next(); + it.next(); + result.append("?!"); + } return result.toString(); } @@ -134,7 +144,7 @@ public class RegexExpression { final char current1 = it.peek(1); if (current1 == '.' || current1 == '*' || current1 == '\\' || current1 == '?' || current1 == '^' || current1 == '$' || current1 == '|' || current1 == '(' || current1 == ')' || current1 == '[' - || current1 == ']' || current1 == '{' || current1 == '}') + || current1 == ']' || current1 == '{' || current1 == '}' || current1 == '<' || current1 == '>') return true; } return false; diff --git a/src/net/sourceforge/plantuml/salt/PSystemSaltFactory2.java b/src/net/sourceforge/plantuml/salt/PSystemSaltFactory2.java index b8240ac6b..0558da61f 100644 --- a/src/net/sourceforge/plantuml/salt/PSystemSaltFactory2.java +++ b/src/net/sourceforge/plantuml/salt/PSystemSaltFactory2.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.salt; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -52,17 +51,13 @@ public class PSystemSaltFactory2 extends PSystemCommandFactory { } @Override - protected List createCommands() { - - final List cmds = new ArrayList<>(); - if (getDiagramType() == DiagramType.UML) { + protected void initCommandsList(List cmds) { + if (getDiagramType() == DiagramType.UML) cmds.add(new CommandSalt()); - } + CommonCommands.addCommonCommands2(cmds); CommonCommands.addTitleCommands(cmds); cmds.add(new CommandAnything()); - - return cmds; } @Override diff --git a/src/net/sourceforge/plantuml/sequencediagram/SequenceDiagramFactory.java b/src/net/sourceforge/plantuml/sequencediagram/SequenceDiagramFactory.java index e231f5e45..c9fc7dc88 100644 --- a/src/net/sourceforge/plantuml/sequencediagram/SequenceDiagramFactory.java +++ b/src/net/sourceforge/plantuml/sequencediagram/SequenceDiagramFactory.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.sequencediagram; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -89,10 +88,7 @@ public class SequenceDiagramFactory extends PSystemCommandFactory { } @Override - protected List createCommands() { - - final List cmds = new ArrayList<>(); - + protected void initCommandsList(List cmds) { CommonCommands.addCommonCommands1(cmds); cmds.add(new CommandHideUnlinked()); @@ -149,8 +145,6 @@ public class SequenceDiagramFactory extends PSystemCommandFactory { cmds.add(new CommandFootboxOld()); cmds.add(new CommandUrl()); cmds.add(new CommandLinkAnchor()); - - return cmds; } } diff --git a/src/net/sourceforge/plantuml/sequencediagram/command/CommandSkin.java b/src/net/sourceforge/plantuml/sequencediagram/command/CommandSkin.java index 345928a89..25f6e0077 100644 --- a/src/net/sourceforge/plantuml/sequencediagram/command/CommandSkin.java +++ b/src/net/sourceforge/plantuml/sequencediagram/command/CommandSkin.java @@ -48,7 +48,9 @@ import net.sourceforge.plantuml.command.regex.RegexResult; public class CommandSkin extends SingleLineCommand2 { - public CommandSkin() { + public static final CommandSkin ME = new CommandSkin(); + + private CommandSkin() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/sequencediagram/teoz/CommunicationTileNoteBottomTopAbstract.java b/src/net/sourceforge/plantuml/sequencediagram/teoz/CommunicationTileNoteBottomTopAbstract.java index 579f4906a..7983c1ff5 100644 --- a/src/net/sourceforge/plantuml/sequencediagram/teoz/CommunicationTileNoteBottomTopAbstract.java +++ b/src/net/sourceforge/plantuml/sequencediagram/teoz/CommunicationTileNoteBottomTopAbstract.java @@ -38,15 +38,12 @@ package net.sourceforge.plantuml.sequencediagram.teoz; import net.sourceforge.plantuml.ISkinParam; import net.sourceforge.plantuml.awt.geom.XDimension2D; import net.sourceforge.plantuml.graphic.StringBounder; -import net.sourceforge.plantuml.graphic.UDrawable; import net.sourceforge.plantuml.real.Real; import net.sourceforge.plantuml.sequencediagram.AbstractMessage; import net.sourceforge.plantuml.sequencediagram.Event; import net.sourceforge.plantuml.sequencediagram.Note; -import net.sourceforge.plantuml.skin.Area; import net.sourceforge.plantuml.skin.Component; import net.sourceforge.plantuml.skin.ComponentType; -import net.sourceforge.plantuml.skin.Context2D; import net.sourceforge.plantuml.skin.rose.Rose; import net.sourceforge.plantuml.style.PName; import net.sourceforge.plantuml.style.SName; diff --git a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseDivider.java b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseDivider.java index 3c39a8bcb..74816f0e4 100644 --- a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseDivider.java +++ b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseDivider.java @@ -69,7 +69,7 @@ public class ComponentRoseDivider extends AbstractTextualComponent { this.background = style.value(PName.BackGroundColor).asColor(getIHtmlColorSet()); this.borderColor = style.value(PName.LineColor).asColor(getIHtmlColorSet()); this.stroke = style.getStroke(); - this.roundCorner = style.value(PName.RoundCorner).asInt(); + this.roundCorner = style.value(PName.RoundCorner).asInt(false); this.shadow = style.value(PName.Shadowing).asDouble(); this.empty = stringsToDisplay.get(0).length() == 0; diff --git a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseGroupingElse.java b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseGroupingElse.java index ce2581e71..f556dfbaf 100644 --- a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseGroupingElse.java +++ b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseGroupingElse.java @@ -65,7 +65,7 @@ public class ComponentRoseGroupingElse extends AbstractTextualComponent { super(style, LineBreakStrategy.NONE, 5, 5, 1, spriteContainer, comment == null ? null : "[" + comment + "]"); this.teoz = teoz; - this.roundCorner = style.value(PName.RoundCorner).asInt(); + this.roundCorner = style.value(PName.RoundCorner).asInt(false); this.groupBorder = style.value(PName.LineColor).asColor(getIHtmlColorSet()); this.backgroundColor = teoz ? HColors.transparent() : style.value(PName.BackGroundColor).asColor(getIHtmlColorSet()); diff --git a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseGroupingHeader.java b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseGroupingHeader.java index 2a4e65cb8..2e5ad1703 100644 --- a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseGroupingHeader.java +++ b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseGroupingHeader.java @@ -74,7 +74,7 @@ public class ComponentRoseGroupingHeader extends AbstractTextualComponent { ISkinSimple spriteContainer) { super(styleHeader, LineBreakStrategy.NONE, 15, 30, 1, spriteContainer, strings.get(0)); - this.roundCorner = style.value(PName.RoundCorner).asInt(); + this.roundCorner = style.value(PName.RoundCorner).asInt(false); this.background = teoz ? HColors.transparent() : style.value(PName.BackGroundColor).asColor(getIHtmlColorSet()); this.symbolContext = style.getSymbolContext(getIHtmlColorSet()); this.symbolContextCorner = styleHeader.getSymbolContext(getIHtmlColorSet()); diff --git a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseNote.java b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseNote.java index de9e6df90..4c4b066ed 100644 --- a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseNote.java +++ b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseNote.java @@ -70,7 +70,7 @@ final public class ComponentRoseNote extends AbstractTextualComponent implements this.paddingY = paddingY; this.position = position; this.symbolContext = style.getSymbolContext(getIHtmlColorSet(), colors); - this.roundCorner = style.value(PName.RoundCorner).asInt(); + this.roundCorner = style.value(PName.RoundCorner).asInt(false); } diff --git a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseNoteBox.java b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseNoteBox.java index 0423b03d0..7e6dfce9f 100644 --- a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseNoteBox.java +++ b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseNoteBox.java @@ -58,7 +58,7 @@ final public class ComponentRoseNoteBox extends AbstractTextualComponent { super(style, spriteContainer.wrapWidth(), 4, 4, 4, spriteContainer, strings, false); this.symbolContext = style.getSymbolContext(getIHtmlColorSet(), colors); - this.roundCorner = style.value(PName.RoundCorner).asInt(); + this.roundCorner = style.value(PName.RoundCorner).asInt(false); } @Override diff --git a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseParticipant.java b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseParticipant.java index 410eb1e81..413227007 100644 --- a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseParticipant.java +++ b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseParticipant.java @@ -68,8 +68,8 @@ public class ComponentRoseParticipant extends AbstractTextualComponent { double minWidth, boolean collections, double padding) { super(style, stereo, LineBreakStrategy.NONE, 7, 7, 7, spriteContainer, stringsToDisplay, false); - this.roundCorner = style.value(PName.RoundCorner).asInt(); - this.diagonalCorner = style.value(PName.DiagonalCorner).asInt(); + this.roundCorner = style.value(PName.RoundCorner).asInt(false); + this.diagonalCorner = style.value(PName.DiagonalCorner).asInt(false); final SymbolContext biColor = style.getSymbolContext(getIHtmlColorSet()); this.stroke = style.getStroke(); diff --git a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseReference.java b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseReference.java index 68c12f2a0..cf84c038c 100644 --- a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseReference.java +++ b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseReference.java @@ -73,7 +73,7 @@ public class ComponentRoseReference extends AbstractTextualComponent { this.symbolContextHeader = styleHeader.getSymbolContext(getIHtmlColorSet()); this.symbolContextBody = style.getSymbolContext(getIHtmlColorSet()); - this.roundCorner = style.value(PName.RoundCorner).asInt(); + this.roundCorner = style.value(PName.RoundCorner).asInt(false); final FontConfiguration fcHeader = styleHeader.getFontConfiguration(getIHtmlColorSet()); this.position = style.getHorizontalAlignment(); diff --git a/src/net/sourceforge/plantuml/sprite/CommandListSprite.java b/src/net/sourceforge/plantuml/sprite/CommandListSprite.java index c9dc3efc8..6d99bc54d 100644 --- a/src/net/sourceforge/plantuml/sprite/CommandListSprite.java +++ b/src/net/sourceforge/plantuml/sprite/CommandListSprite.java @@ -51,7 +51,8 @@ public class CommandListSprite extends SingleLineCommand2 { } private static IRegex getRegexConcat() { - return RegexConcat.build(CommandListSprite.class.getName(), RegexLeaf.start(), // + return RegexConcat.build(CommandListSprite.class.getName(), // + RegexLeaf.start(), // new RegexLeaf("listsprites?"), // RegexLeaf.end()); } diff --git a/src/net/sourceforge/plantuml/sprite/ListSpriteDiagramFactory.java b/src/net/sourceforge/plantuml/sprite/ListSpriteDiagramFactory.java index 1cd8d7b9f..b11f9e7c6 100644 --- a/src/net/sourceforge/plantuml/sprite/ListSpriteDiagramFactory.java +++ b/src/net/sourceforge/plantuml/sprite/ListSpriteDiagramFactory.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.sprite; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -47,13 +46,10 @@ import net.sourceforge.plantuml.core.UmlSource; public class ListSpriteDiagramFactory extends PSystemCommandFactory { @Override - protected List createCommands() { - - final List cmds = new ArrayList<>(); + protected void initCommandsList(List cmds) { CommonCommands.addCommonCommands1(cmds); CommonCommands.addCommonCommands2(cmds); cmds.add(new CommandListSprite()); - return cmds; } @Override diff --git a/src/net/sourceforge/plantuml/sprite/StdlibDiagramFactory.java b/src/net/sourceforge/plantuml/sprite/StdlibDiagramFactory.java index 8c0fd1763..033c23994 100644 --- a/src/net/sourceforge/plantuml/sprite/StdlibDiagramFactory.java +++ b/src/net/sourceforge/plantuml/sprite/StdlibDiagramFactory.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.sprite; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -46,11 +45,8 @@ import net.sourceforge.plantuml.core.UmlSource; public class StdlibDiagramFactory extends PSystemCommandFactory { @Override - protected List createCommands() { - - final List cmds = new ArrayList<>(); + protected void initCommandsList(List cmds) { cmds.add(new CommandStdlib()); - return cmds; } @Override diff --git a/src/net/sourceforge/plantuml/statediagram/StateDiagramFactory.java b/src/net/sourceforge/plantuml/statediagram/StateDiagramFactory.java index bebe3eee1..4dc0c7902 100644 --- a/src/net/sourceforge/plantuml/statediagram/StateDiagramFactory.java +++ b/src/net/sourceforge/plantuml/statediagram/StateDiagramFactory.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.statediagram; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -71,8 +70,7 @@ public class StateDiagramFactory extends PSystemCommandFactory { } @Override - protected List createCommands() { - final List cmds = new ArrayList<>(); + protected void initCommandsList(List cmds) { cmds.add(new CommandFootboxIgnored()); cmds.add(new CommandRankDir()); cmds.add(new CommandRemoveRestore()); @@ -105,8 +103,6 @@ public class StateDiagramFactory extends PSystemCommandFactory { CommonCommands.addCommonCommands1(cmds); cmds.add(new CommandHideShow2()); cmds.add(new CommandNamespaceSeparator()); - - return cmds; } } diff --git a/src/net/sourceforge/plantuml/statediagram/command/CommandHideEmptyDescription.java b/src/net/sourceforge/plantuml/statediagram/command/CommandHideEmptyDescription.java index 1cc9e059e..6bd958abe 100644 --- a/src/net/sourceforge/plantuml/statediagram/command/CommandHideEmptyDescription.java +++ b/src/net/sourceforge/plantuml/statediagram/command/CommandHideEmptyDescription.java @@ -46,7 +46,9 @@ import net.sourceforge.plantuml.command.regex.RegexResult; public class CommandHideEmptyDescription extends SingleLineCommand2 { - public CommandHideEmptyDescription() { + public static final CommandHideEmptyDescription ME = new CommandHideEmptyDescription(); + + private CommandHideEmptyDescription() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/statediagram/command/CommandLinkStateCommon.java b/src/net/sourceforge/plantuml/statediagram/command/CommandLinkStateCommon.java index 6e8748305..fdd1a5537 100644 --- a/src/net/sourceforge/plantuml/statediagram/command/CommandLinkStateCommon.java +++ b/src/net/sourceforge/plantuml/statediagram/command/CommandLinkStateCommon.java @@ -122,7 +122,6 @@ abstract class CommandLinkStateCommon extends SingleLineCommand2 { link = link.getInv(); link.applyStyle(arg.getLazzy("ARROW_STYLE", 0)); - link.setUmlDiagramType(UmlDiagramType.STATE); diagram.addLink(link); return CommandExecutionResult.ok(); diff --git a/src/net/sourceforge/plantuml/style/CommandStyleImport.java b/src/net/sourceforge/plantuml/style/CommandStyleImport.java index 089649b1e..32241b08b 100644 --- a/src/net/sourceforge/plantuml/style/CommandStyleImport.java +++ b/src/net/sourceforge/plantuml/style/CommandStyleImport.java @@ -52,7 +52,9 @@ import net.sourceforge.plantuml.security.SFile; public class CommandStyleImport extends SingleLineCommand2 { - public CommandStyleImport() { + public static final CommandStyleImport ME = new CommandStyleImport(); + + private CommandStyleImport() { super(getRegexConcat()); } diff --git a/src/net/sourceforge/plantuml/style/CommandStyleMultilinesCSS.java b/src/net/sourceforge/plantuml/style/CommandStyleMultilinesCSS.java index f2b198098..2448d9719 100644 --- a/src/net/sourceforge/plantuml/style/CommandStyleMultilinesCSS.java +++ b/src/net/sourceforge/plantuml/style/CommandStyleMultilinesCSS.java @@ -48,7 +48,9 @@ import net.sourceforge.plantuml.command.regex.RegexLeaf; public class CommandStyleMultilinesCSS extends CommandMultilines2 { - public CommandStyleMultilinesCSS() { + public static final CommandStyleMultilinesCSS ME = new CommandStyleMultilinesCSS(); + + private CommandStyleMultilinesCSS() { super(getRegexConcat(), MultilinesStrategy.REMOVE_STARTING_QUOTE, Trim.BOTH); } diff --git a/src/net/sourceforge/plantuml/style/FromSkinparamToStyle.java b/src/net/sourceforge/plantuml/style/FromSkinparamToStyle.java index d629c905b..a9c86c5cc 100644 --- a/src/net/sourceforge/plantuml/style/FromSkinparamToStyle.java +++ b/src/net/sourceforge/plantuml/style/FromSkinparamToStyle.java @@ -108,6 +108,7 @@ public class FromSkinparamToStyle { addConFont("SequenceGroupHeader", SName.groupHeader); addConvert("SequenceBoxBorderColor", PName.LineColor, SName.box); addConvert("SequenceBoxBackgroundColor", PName.BackGroundColor, SName.box); + addConvert("SequenceBoxFontColor", PName.FontColor, SName.box); addConvert("SequenceLifeLineBorderColor", PName.LineColor, SName.lifeLine); addConvert("SequenceLifeLineBackgroundColor", PName.BackGroundColor, SName.lifeLine); addConvert("sequenceDividerBackgroundColor", PName.BackGroundColor, SName.separator); @@ -231,6 +232,8 @@ public class FromSkinparamToStyle { // addConvert("sequenceStereotypeFontColor", PName.FontColor, SName.stereotype); // addConvert("sequenceStereotypeFontName", PName.FontName, SName.stereotype); + addConvert("lifelineStrategy", PName.LineStyle, SName.lifeLine); + } private static void addMagic(SName sname) { @@ -274,7 +277,11 @@ public class FromSkinparamToStyle { value = "0"; else if (value.equalsIgnoreCase("true")) value = "3"; + } else if (key.equals("lifelinestrategy")) { + if (value.equalsIgnoreCase("solid")) + value = "0"; } + if (value.equalsIgnoreCase("right:right")) value = "right"; if (value.equalsIgnoreCase("dotted")) diff --git a/src/net/sourceforge/plantuml/style/Style.java b/src/net/sourceforge/plantuml/style/Style.java index 0fd8836a4..41d78014f 100644 --- a/src/net/sourceforge/plantuml/style/Style.java +++ b/src/net/sourceforge/plantuml/style/Style.java @@ -181,8 +181,8 @@ public class Style { public UFont getUFont() { final String family = value(PName.FontName).asString(); final int fontStyle = value(PName.FontStyle).asFontStyle(); - int size = value(PName.FontSize).asInt(); - if (size == 0) + int size = value(PName.FontSize).asInt(true); + if (size == -1) size = 14; return new UFont(family, fontStyle, size); } @@ -298,7 +298,7 @@ public class Style { final HColor backgroundColor = this.value(PName.BackGroundColor).asColor(set); final HColor lineColor = this.value(PName.LineColor).asColor(set); final UStroke stroke = this.getStroke(); - final int cornersize = this.value(PName.RoundCorner).asInt(); + final int cornersize = this.value(PName.RoundCorner).asInt(false); final ClockwiseTopRightBottomLeft margin = this.getMargin(); final ClockwiseTopRightBottomLeft padding = this.getPadding(); final TextBlock result = TextBlockUtils.bordered(textBlock, stroke, lineColor, backgroundColor, cornersize, diff --git a/src/net/sourceforge/plantuml/style/Value.java b/src/net/sourceforge/plantuml/style/Value.java index 9a77a035e..d5188ebe6 100644 --- a/src/net/sourceforge/plantuml/style/Value.java +++ b/src/net/sourceforge/plantuml/style/Value.java @@ -45,7 +45,7 @@ public interface Value { public HColor asColor(HColorSet set); - public int asInt(); + public int asInt(boolean minusOneIfError); public double asDouble(); diff --git a/src/net/sourceforge/plantuml/style/ValueAbstract.java b/src/net/sourceforge/plantuml/style/ValueAbstract.java index 72d6a9dee..0339ae1b2 100644 --- a/src/net/sourceforge/plantuml/style/ValueAbstract.java +++ b/src/net/sourceforge/plantuml/style/ValueAbstract.java @@ -49,7 +49,7 @@ public abstract class ValueAbstract implements Value { throw new UnsupportedOperationException("Class=" + getClass()); } - public int asInt() { + public int asInt(boolean minusOneIfError) { throw new UnsupportedOperationException("Class=" + getClass()); } diff --git a/src/net/sourceforge/plantuml/style/ValueImpl.java b/src/net/sourceforge/plantuml/style/ValueImpl.java index 9c43dae51..cd411848c 100644 --- a/src/net/sourceforge/plantuml/style/ValueImpl.java +++ b/src/net/sourceforge/plantuml/style/ValueImpl.java @@ -112,11 +112,11 @@ public class ValueImpl implements Value { return "true".equalsIgnoreCase(value.getValue1()); } - public int asInt() { + public int asInt(boolean minusOneIfError) { String s = value.getValue1(); s = s.replaceAll("[^0-9]", ""); if (s.length() == 0) - return 0; + return minusOneIfError ? -1 : 0; return Integer.parseInt(s); } diff --git a/src/net/sourceforge/plantuml/style/ValueNull.java b/src/net/sourceforge/plantuml/style/ValueNull.java index e0aff5d7d..f9c9278dc 100644 --- a/src/net/sourceforge/plantuml/style/ValueNull.java +++ b/src/net/sourceforge/plantuml/style/ValueNull.java @@ -50,7 +50,7 @@ public class ValueNull extends ValueAbstract implements Value { } @Override - public int asInt() { + public int asInt(boolean minusOneIfError) { return 0; } diff --git a/src/net/sourceforge/plantuml/svek/SvekLine.java b/src/net/sourceforge/plantuml/svek/SvekLine.java index 4a66b8621..af03b1e19 100644 --- a/src/net/sourceforge/plantuml/svek/SvekLine.java +++ b/src/net/sourceforge/plantuml/svek/SvekLine.java @@ -157,6 +157,8 @@ public class SvekLine implements Moveable, Hideable, GuideLine { private final double labelShield; + private final UmlDiagramType type; + @Override public String toString() { return super.toString() + " color=" + lineColor; @@ -222,13 +224,14 @@ public class SvekLine implements Moveable, Hideable, GuideLine { ((EntityImp) link.getEntity2()).ensureMargins(Margins.uniform(16)); if (link.getLinkArg().getKal1() != null) - this.kal1 = new Kal(this, link.getLinkArg().getKal1(), font, skinParam, (EntityImp) link.getEntity1(), - link, stringBounder); + this.kal1 = new Kal(this, link.getLinkArg().getKal1(), font, skinParam, (EntityImp) link.getEntity1(), link, + stringBounder); if (link.getLinkArg().getKal2() != null) - this.kal2 = new Kal(this, link.getLinkArg().getKal2(), font, skinParam, (EntityImp) link.getEntity2(), - link, stringBounder); + this.kal2 = new Kal(this, link.getLinkArg().getKal2(), font, skinParam, (EntityImp) link.getEntity2(), link, + stringBounder); + this.type = skinParam.getUmlDiagramType(); this.link = Objects.requireNonNull(link); this.skinParam = skinParam; // this.umlType = link.getUmlDiagramType(); @@ -272,7 +275,7 @@ public class SvekLine implements Moveable, Hideable, GuideLine { labelOnly = StringWithArrow.addMagicArrow(labelOnly, this, font); } else { - final HorizontalAlignment alignment = getMessageTextAlignment(link.getUmlDiagramType(), skinParam); + final HorizontalAlignment alignment = getMessageTextAlignment(type, skinParam); final boolean hasSeveralGuideLines = link.getLabel().hasSeveralGuideLines(); final TextBlock block; if (hasSeveralGuideLines) diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageTips.java b/src/net/sourceforge/plantuml/svek/image/EntityImageTips.java index 4703d818c..d037996ab 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageTips.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageTips.java @@ -54,7 +54,6 @@ import net.sourceforge.plantuml.graphic.InnerStrategy; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.color.ColorType; -import net.sourceforge.plantuml.skin.rose.Rose; import net.sourceforge.plantuml.style.PName; import net.sourceforge.plantuml.style.SName; import net.sourceforge.plantuml.style.Style; diff --git a/src/net/sourceforge/plantuml/timingdiagram/TimingDiagramFactory.java b/src/net/sourceforge/plantuml/timingdiagram/TimingDiagramFactory.java index acdfcde22..1e8895785 100644 --- a/src/net/sourceforge/plantuml/timingdiagram/TimingDiagramFactory.java +++ b/src/net/sourceforge/plantuml/timingdiagram/TimingDiagramFactory.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.timingdiagram; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -74,10 +73,7 @@ public class TimingDiagramFactory extends PSystemCommandFactory { } @Override - protected List createCommands() { - - final List cmds = new ArrayList<>(); - + protected void initCommandsList(List cmds) { CommonCommands.addCommonCommands1(cmds); cmds.add(new CommandFootboxIgnored()); cmds.add(new CommandRobustConcise()); @@ -101,8 +97,6 @@ public class TimingDiagramFactory extends PSystemCommandFactory { cmds.add(new CommandTicks()); cmds.add(new CommandPixelHeight()); cmds.add(new CommandUseDateFormat()); - - return cmds; } } diff --git a/src/net/sourceforge/plantuml/ugraphic/MutableImage.java b/src/net/sourceforge/plantuml/ugraphic/MutableImage.java index 78d361c21..f25d285cb 100644 --- a/src/net/sourceforge/plantuml/ugraphic/MutableImage.java +++ b/src/net/sourceforge/plantuml/ugraphic/MutableImage.java @@ -50,4 +50,6 @@ public interface MutableImage { public MutableImage monochrome(); + double getScale(); + } diff --git a/src/net/sourceforge/plantuml/ugraphic/PixelImage.java b/src/net/sourceforge/plantuml/ugraphic/PixelImage.java index dc041b41b..785aab475 100644 --- a/src/net/sourceforge/plantuml/ugraphic/PixelImage.java +++ b/src/net/sourceforge/plantuml/ugraphic/PixelImage.java @@ -186,4 +186,9 @@ public class PixelImage implements MutableImage { return result; } + @Override + public final double getScale() { + return scale; + } + } diff --git a/src/net/sourceforge/plantuml/ugraphic/UImage.java b/src/net/sourceforge/plantuml/ugraphic/UImage.java index 8f75688c2..2a2a172b4 100644 --- a/src/net/sourceforge/plantuml/ugraphic/UImage.java +++ b/src/net/sourceforge/plantuml/ugraphic/UImage.java @@ -99,4 +99,8 @@ public class UImage implements UShape { return new UImage(image.monochrome(), rawFileName, formula); } + public double getScale() { + return image.getScale(); + } + } diff --git a/src/net/sourceforge/plantuml/ugraphic/svg/UGraphicSvg.java b/src/net/sourceforge/plantuml/ugraphic/svg/UGraphicSvg.java index 2715ca7f2..85d474d41 100644 --- a/src/net/sourceforge/plantuml/ugraphic/svg/UGraphicSvg.java +++ b/src/net/sourceforge/plantuml/ugraphic/svg/UGraphicSvg.java @@ -63,7 +63,6 @@ import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UText; import net.sourceforge.plantuml.ugraphic.color.ColorMapper; import net.sourceforge.plantuml.ugraphic.color.HColor; -import net.sourceforge.plantuml.ugraphic.color.HColorGradient; public class UGraphicSvg extends AbstractUGraphic implements ClipContainer { diff --git a/src/net/sourceforge/plantuml/ugraphic/tikz/DriverImageTikz.java b/src/net/sourceforge/plantuml/ugraphic/tikz/DriverImageTikz.java index 66f225c1c..330f042bb 100644 --- a/src/net/sourceforge/plantuml/ugraphic/tikz/DriverImageTikz.java +++ b/src/net/sourceforge/plantuml/ugraphic/tikz/DriverImageTikz.java @@ -5,12 +5,12 @@ * (C) Copyright 2009-2023, 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 @@ -44,11 +44,13 @@ public class DriverImageTikz implements UDriver { public void draw(UImage shape, double x, double y, ColorMapper mapper, UParam param, TikzGraphics tikz) { final String rawFileName = shape.getRawFileName(); - - // TODO how to get this from the parameter? - double scale = 1.0; if (rawFileName != null) { - final String raw = "\\includegraphics[scale=" + scale + "]{" + rawFileName + "}"; + final double scale = shape.getScale(); + final String raw; + if (scale == 1) + raw = "\\includegraphics{" + rawFileName + "}"; + else + raw = "\\includegraphics[scale=" + TikzGraphics.format(scale) + "]{" + rawFileName + "}"; tikz.appendRaw(x, y, raw); return; } diff --git a/src/net/sourceforge/plantuml/version/Version.java b/src/net/sourceforge/plantuml/version/Version.java index df50fa4dc..01ed03ed4 100644 --- a/src/net/sourceforge/plantuml/version/Version.java +++ b/src/net/sourceforge/plantuml/version/Version.java @@ -81,7 +81,7 @@ public class Version { } public static int beta() { - final int beta = 1; + final int beta = 4; return beta; } diff --git a/src/net/sourceforge/plantuml/wbs/WBSDiagram.java b/src/net/sourceforge/plantuml/wbs/WBSDiagram.java index ddbbb7cdd..c7f6ca88e 100644 --- a/src/net/sourceforge/plantuml/wbs/WBSDiagram.java +++ b/src/net/sourceforge/plantuml/wbs/WBSDiagram.java @@ -46,7 +46,6 @@ import net.sourceforge.plantuml.Direction; import net.sourceforge.plantuml.FileFormatOption; import net.sourceforge.plantuml.UmlDiagram; import net.sourceforge.plantuml.UmlDiagramType; -import net.sourceforge.plantuml.activitydiagram3.ftile.vcompact.FtileGroup; import net.sourceforge.plantuml.awt.geom.XDimension2D; import net.sourceforge.plantuml.awt.geom.XRectangle2D; import net.sourceforge.plantuml.command.CommandExecutionResult; @@ -67,7 +66,6 @@ import net.sourceforge.plantuml.style.NoStyleAvailableException; import net.sourceforge.plantuml.style.PName; import net.sourceforge.plantuml.style.SName; import net.sourceforge.plantuml.style.Style; -import net.sourceforge.plantuml.style.StyleSignature; import net.sourceforge.plantuml.style.StyleSignatureBasic; import net.sourceforge.plantuml.svek.TextBlockBackcolored; import net.sourceforge.plantuml.ugraphic.AbstractCommonUGraphic; diff --git a/src/net/sourceforge/plantuml/wbs/WBSDiagramFactory.java b/src/net/sourceforge/plantuml/wbs/WBSDiagramFactory.java index 94847c6c7..f57d7426c 100644 --- a/src/net/sourceforge/plantuml/wbs/WBSDiagramFactory.java +++ b/src/net/sourceforge/plantuml/wbs/WBSDiagramFactory.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.wbs; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -52,16 +51,12 @@ public class WBSDiagramFactory extends PSystemCommandFactory { } @Override - protected List createCommands() { - - final List cmds = new ArrayList<>(); + protected void initCommandsList(List cmds) { CommonCommands.addCommonCommands1(cmds); cmds.add(new CommandWBSItem(1)); cmds.add(new CommandWBSItem(0)); cmds.add(new CommandWBSItemMultiline()); cmds.add(new CommandWBSLink()); - - return cmds; } @Override diff --git a/src/net/sourceforge/plantuml/wire/WireDiagramFactory.java b/src/net/sourceforge/plantuml/wire/WireDiagramFactory.java index ba69069e2..630563893 100644 --- a/src/net/sourceforge/plantuml/wire/WireDiagramFactory.java +++ b/src/net/sourceforge/plantuml/wire/WireDiagramFactory.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.wire; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -52,9 +51,7 @@ public class WireDiagramFactory extends PSystemCommandFactory { } @Override - protected List createCommands() { - - final List cmds = new ArrayList<>(); + protected void initCommandsList(List cmds) { CommonCommands.addCommonCommands1(cmds); cmds.add(new CommandComponent()); cmds.add(new CommandSpot()); @@ -63,8 +60,6 @@ public class WireDiagramFactory extends PSystemCommandFactory { cmds.add(new CommandWLink()); cmds.add(new CommandNewColumn()); cmds.add(new CommandPrint()); - - return cmds; } @Override diff --git a/themes/puml-theme-cerulean-outline.puml b/themes/puml-theme-cerulean-outline.puml index 6a38ef533..ede3936cc 100644 --- a/themes/puml-theme-cerulean-outline.puml +++ b/themes/puml-theme-cerulean-outline.puml @@ -294,7 +294,7 @@ skinparam sequence { GroupFontColor $DARK GroupHeaderFontColor $INFO_TEXT '' - DividerBackgroundColor $BGCOLOR + DividerBackgroundColor $LIGHT DividerBorderColor $GRAY DividerBorderThickness 2 DividerFontColor $DARK