mirror of
https://github.com/octoleo/plantuml.git
synced 2024-11-24 22:07:33 +00:00
Minor bug fixes
This commit is contained in:
parent
2621139b20
commit
1afe7aae82
@ -400,6 +400,7 @@ timingDiagram {
|
||||
timeline {
|
||||
FontStyle plain
|
||||
FontSize 11
|
||||
LineThickness 2
|
||||
}
|
||||
note {
|
||||
LineThickness 0.5
|
||||
|
@ -139,9 +139,9 @@ public class CommandCreateClass extends SingleLineCommand2<ClassDiagram> {
|
||||
if (diagram.V1972()) {
|
||||
if (diagram.leafExistSmart(idNewLong)) {
|
||||
entity = diagram.getOrCreateLeaf(idNewLong, idNewLong, type, null);
|
||||
if (entity.muteToType(type, null) == false) {
|
||||
if (entity.muteToType(type, null) == false)
|
||||
return CommandExecutionResult.error("Bad name");
|
||||
}
|
||||
|
||||
} else {
|
||||
entity = diagram.createLeaf(idNewLong, idNewLong, Display.getWithNewlines(display), type, null);
|
||||
}
|
||||
@ -149,9 +149,9 @@ public class CommandCreateClass extends SingleLineCommand2<ClassDiagram> {
|
||||
final Code code = diagram.buildCode(idShort);
|
||||
if (diagram.leafExist(code)) {
|
||||
entity = diagram.getOrCreateLeaf(idNewLong, code, type, null);
|
||||
if (entity.muteToType(type, null) == false) {
|
||||
if (entity.muteToType(type, null) == false)
|
||||
return CommandExecutionResult.error("Bad name");
|
||||
}
|
||||
|
||||
} else {
|
||||
entity = diagram.createLeaf(idNewLong, code, Display.getWithNewlines(display), type, null);
|
||||
}
|
||||
@ -162,9 +162,8 @@ public class CommandCreateClass extends SingleLineCommand2<ClassDiagram> {
|
||||
diagram.getSkinParam().getIHtmlColorSet()));
|
||||
entity.setStereostyle(stereo);
|
||||
}
|
||||
if (generic != null) {
|
||||
if (generic != null)
|
||||
entity.setGeneric(generic);
|
||||
}
|
||||
|
||||
final String urlString = arg.get("URL", 0);
|
||||
if (urlString != null) {
|
||||
@ -180,57 +179,19 @@ public class CommandCreateClass extends SingleLineCommand2<ClassDiagram> {
|
||||
|
||||
final HColor lineColor = s == null ? null
|
||||
: diagram.getSkinParam().getIHtmlColorSet().getColor(diagram.getSkinParam().getThemeStyle(), s);
|
||||
if (lineColor != null) {
|
||||
if (lineColor != null)
|
||||
colors = colors.add(ColorType.LINE, lineColor);
|
||||
}
|
||||
if (arg.get("LINECOLOR", 0) != null) {
|
||||
|
||||
if (arg.get("LINECOLOR", 0) != null)
|
||||
colors = colors.addLegacyStroke(arg.get("LINECOLOR", 0));
|
||||
}
|
||||
|
||||
entity.setColors(colors);
|
||||
|
||||
// entity.setSpecificColorTOBEREMOVED(ColorType.LINE, lineColor);
|
||||
// entity.setSpecificColorTOBEREMOVED(ColorType.HEADER,
|
||||
// colors.getColor(ColorType.HEADER));
|
||||
//
|
||||
// if (colors.getLineStyle() != null) {
|
||||
// entity.setSpecificLineStroke(LinkStyle.getStroke(colors.getLineStyle()));
|
||||
// }
|
||||
//
|
||||
// if (arg.get("LINECOLOR", 0) != null) {
|
||||
// entity.applyStroke(arg.get("LINECOLOR", 0));
|
||||
// }
|
||||
|
||||
// manageExtends(diagram, arg, entity);
|
||||
CommandCreateClassMultilines.manageExtends("EXTENDS", diagram, arg, entity);
|
||||
CommandCreateClassMultilines.manageExtends("IMPLEMENTS", diagram, arg, entity);
|
||||
CommandCreateClassMultilines.addTags(entity, arg.get("TAGS", 0));
|
||||
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
// public static void manageExtends(ClassDiagram system, RegexResult arg, final
|
||||
// IEntity entity) {
|
||||
// if (arg.get("EXTENDS", 1) != null) {
|
||||
// final Mode mode = arg.get("EXTENDS", 1).equalsIgnoreCase("extends") ?
|
||||
// Mode.EXTENDS : Mode.IMPLEMENTS;
|
||||
// final Code other = diagram.buildCode(arg.get("EXTENDS", 2));
|
||||
// LeafType type2 = LeafType.CLASS;
|
||||
// if (mode == Mode.IMPLEMENTS) {
|
||||
// type2 = LeafType.INTERFACE;
|
||||
// }
|
||||
// if (mode == Mode.EXTENDS && entity.getEntityType() == LeafType.INTERFACE) {
|
||||
// type2 = LeafType.INTERFACE;
|
||||
// }
|
||||
// final IEntity cl2 = system.getOrCreateLeaf(other, type2, null);
|
||||
// LinkType typeLink = new LinkType(LinkDecor.NONE, LinkDecor.EXTENDS);
|
||||
// if (type2 == LeafType.INTERFACE && entity.getEntityType() !=
|
||||
// LeafType.INTERFACE) {
|
||||
// typeLink = typeLink.getDashed();
|
||||
// }
|
||||
// final Link link = new Link(cl2, entity, typeLink, null, 2, null, null,
|
||||
// system.getLabeldistance(),
|
||||
// system.getLabelangle());
|
||||
// system.addLink(link);
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
||||
|
@ -87,16 +87,15 @@ public class CommandExecutionResult {
|
||||
public static List<String> getStackTrace(Throwable exception) {
|
||||
final List<String> result = new ArrayList<>();
|
||||
result.add(exception.toString());
|
||||
for (StackTraceElement ste : exception.getStackTrace()) {
|
||||
for (StackTraceElement ste : exception.getStackTrace())
|
||||
result.add(" " + ste.toString());
|
||||
}
|
||||
|
||||
if (exception.getCause() != null) {
|
||||
final Throwable cause = exception.getCause();
|
||||
result.add(" ");
|
||||
result.add("Caused by " + cause.toString());
|
||||
for (StackTraceElement ste : cause.getStackTrace()) {
|
||||
for (StackTraceElement ste : cause.getStackTrace())
|
||||
result.add(" " + ste.toString());
|
||||
}
|
||||
|
||||
}
|
||||
return result;
|
||||
@ -107,9 +106,9 @@ public class CommandExecutionResult {
|
||||
}
|
||||
|
||||
public String getError() {
|
||||
if (isOk()) {
|
||||
if (isOk())
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
|
@ -75,7 +75,9 @@ public class BodyEnhanced1 extends BodyEnhancedAbstract implements TextBlock, Wi
|
||||
|
||||
BodyEnhanced1(HorizontalAlignment align, List<CharSequence> rawBody, ISkinParam skinParam, ILeaf entity,
|
||||
Style style) {
|
||||
super(align, style.getFontConfiguration(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet()), style);
|
||||
super(align,
|
||||
style.getFontConfiguration(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet(), entity.getColors()),
|
||||
style);
|
||||
this.style = style;
|
||||
this.rawBody2 = Display.create(rawBody);
|
||||
|
||||
@ -87,9 +89,10 @@ public class BodyEnhanced1 extends BodyEnhancedAbstract implements TextBlock, Wi
|
||||
this.inEllipse = false;
|
||||
}
|
||||
|
||||
BodyEnhanced1(HorizontalAlignment align, Display display, ISkinParam skinParam, ILeaf entity,
|
||||
Style style) {
|
||||
super(align, style.getFontConfiguration(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet()), style);
|
||||
BodyEnhanced1(HorizontalAlignment align, Display display, ISkinParam skinParam, ILeaf entity, Style style) {
|
||||
super(align,
|
||||
style.getFontConfiguration(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet(), entity.getColors()),
|
||||
style);
|
||||
|
||||
this.style = style;
|
||||
this.entity = entity;
|
||||
|
@ -133,9 +133,9 @@ public class Link extends WithLinkType implements Hideable, Removeable {
|
||||
public Link(IEntity cl1, IEntity cl2, LinkType type, Display label, int length, String qualifier1,
|
||||
String qualifier2, String labeldistance, String labelangle, HColor specificColor,
|
||||
StyleBuilder styleBuilder) {
|
||||
if (length < 1) {
|
||||
if (length < 1)
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
|
||||
this.styleBuilder = styleBuilder;
|
||||
this.cl1 = Objects.requireNonNull(cl1);
|
||||
this.cl2 = Objects.requireNonNull(cl2);
|
||||
|
@ -54,19 +54,19 @@ public class LinkType {
|
||||
}
|
||||
|
||||
public boolean looksLikeRevertedForSvg() {
|
||||
if (this.decor1 == LinkDecor.NONE && this.decor2 != LinkDecor.NONE) {
|
||||
if (this.decor1 == LinkDecor.NONE && this.decor2 != LinkDecor.NONE)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean looksLikeNoDecorAtAllSvg() {
|
||||
if (this.decor1 == LinkDecor.NONE && this.decor2 == LinkDecor.NONE) {
|
||||
if (this.decor1 == LinkDecor.NONE && this.decor2 == LinkDecor.NONE)
|
||||
return true;
|
||||
}
|
||||
if (this.decor1 != LinkDecor.NONE && this.decor2 != LinkDecor.NONE) {
|
||||
|
||||
if (this.decor1 != LinkDecor.NONE && this.decor2 != LinkDecor.NONE)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -184,9 +184,9 @@ public class LinkType {
|
||||
|
||||
final double arrowsize = Math.max(decor1.getArrowSize(), decor2.getArrowSize());
|
||||
if (arrowsize > 0) {
|
||||
if (sb.length() > 0) {
|
||||
if (sb.length() > 0)
|
||||
sb.append(",");
|
||||
}
|
||||
|
||||
sb.append("arrowsize=" + arrowsize);
|
||||
}
|
||||
return sb.toString();
|
||||
@ -235,13 +235,16 @@ public class LinkType {
|
||||
}
|
||||
|
||||
public UStroke getStroke3(UStroke defaultThickness) {
|
||||
if (linkStyle.isThicknessOverrided()) {
|
||||
if (linkStyle.isThicknessOverrided())
|
||||
return linkStyle.getStroke3();
|
||||
}
|
||||
if (defaultThickness == null) {
|
||||
|
||||
if (defaultThickness == null)
|
||||
return linkStyle.getStroke3();
|
||||
}
|
||||
return linkStyle.goThickness(defaultThickness.getThickness()).getStroke3();
|
||||
|
||||
if (defaultThickness.getDashVisible() == 0 && defaultThickness.getDashSpace() == 0)
|
||||
return linkStyle.goThickness(defaultThickness.getThickness()).getStroke3();
|
||||
|
||||
return defaultThickness;
|
||||
}
|
||||
|
||||
public LinkMiddleDecor getMiddleDecor() {
|
||||
|
@ -174,7 +174,7 @@ public class MethodsOrFieldsArea extends AbstractTextBlock implements TextBlock,
|
||||
|
||||
private TextBlock createTextBlock(CharSequence cs) {
|
||||
|
||||
FontConfiguration config = FontConfiguration.create(skinParam, style);
|
||||
FontConfiguration config = FontConfiguration.create(skinParam, style, leaf.getColors());
|
||||
|
||||
if (cs instanceof Member) {
|
||||
final Member m = (Member) cs;
|
||||
@ -195,9 +195,8 @@ public class MethodsOrFieldsArea extends AbstractTextBlock implements TextBlock,
|
||||
return new TextBlockTracer(m, bloc);
|
||||
}
|
||||
|
||||
if (cs instanceof EmbeddedDiagram) {
|
||||
if (cs instanceof EmbeddedDiagram)
|
||||
return ((EmbeddedDiagram) cs).asDraw(skinParam);
|
||||
}
|
||||
|
||||
return Display.getWithNewlines(cs.toString()).create8(config, align, skinParam, CreoleMode.SIMPLE_LINE,
|
||||
skinParam.wrapWidth());
|
||||
|
@ -35,7 +35,6 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.donors;
|
||||
|
||||
import net.sourceforge.plantuml.awt.geom.Dimension2D;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@ -45,6 +44,7 @@ import java.util.StringTokenizer;
|
||||
import net.sourceforge.plantuml.BackSlash;
|
||||
import net.sourceforge.plantuml.FileFormatOption;
|
||||
import net.sourceforge.plantuml.PlainDiagram;
|
||||
import net.sourceforge.plantuml.awt.geom.Dimension2D;
|
||||
import net.sourceforge.plantuml.code.AsciiEncoder;
|
||||
import net.sourceforge.plantuml.code.CompressionBrotli;
|
||||
import net.sourceforge.plantuml.code.NoPlantumlCompressionException;
|
||||
@ -70,29 +70,30 @@ public class PSystemDonors extends PlainDiagram {
|
||||
private static final int COLS = 6;
|
||||
private static final int FREE_LINES = 6;
|
||||
|
||||
public static final String DONORS = "6t4E03mSS7Dt1Og5J5Uh3hcJits4ZufNcNRmsK-DFu8Mfx004WGrllMtt9JI0K46z1ewUipjEptkDz9V"
|
||||
+ "H5UwzqqpHgtN9kKCeleWw07lRWljG-b_VH3cB7aHt9aIN40AYEBeOlcHRkGuVL9bI2baDAVOxcLYNg-G"
|
||||
+ "IYa-V-KZz1F8fg3pd6aKYPeNE3rg-odslkRdrrnTGomKo_C49L3IPKAwwSFSckbxFssauoVm-wH15OkY"
|
||||
+ "BTsMh94s7MFUrxK07TEkrN8c7qrgLiMugaYnZauQLf5CQCl5v7FaHPyq_gWtuIFgaI4PTGLqbjNHzNDl"
|
||||
+ "NzyJyoyNVSJ957n3KGCZO3soDj7YFFIWOUA0eMKNnTYgmf4dwP38WnRouH-5AOoKd5q6Dmsp1a1OlGCL"
|
||||
+ "H79GcnhETXm6L9bYYxuGRhhKtrWwxyjAgK9N6fv9RCnCr0Ah58aDkg4xSzs-cger0XoHdXAriFKed-FO"
|
||||
+ "Ip-iw9jUIWJhQ-kqBC5VKSekfQRZzftgTvyIm17IyfqFOufGJg0fWocKyMi56LUXkzQ2BJgkSh2G1b4V"
|
||||
+ "jxZfm-R6GoiY79Cf5MeTlupjL2lyeSiMR4p2as1nlwTzARM0Gqssgj82-4AhaXuxNq0o5BmSzFYEl-yT"
|
||||
+ "hgcK96z8j17EaFJRysn7CnO2T6mPiw6RAR0OTrdLMsn1X7gKZWxGMaW6uMnkbxtP1-aZFm7m5XAYsstY"
|
||||
+ "Q0T_VcdAr96BD97GJMci05QVLjHDm-8H36er5TsCAS7qDivnfLjZ7okELSkYJPwt6eo9twZJ51lBPIeo"
|
||||
+ "tR1I3sykVCUsbtOfxfCnU7MxJ_Qw2cWfzvvouzulCX3dQZ9GAJBTyUvllcMPGLZCuf_h5PIUDNjoyz2T"
|
||||
+ "mNOMYvOnivMfXwm01eUILEiZqLX2ZFIsGxR0hute4K1-ZICbU9YH1wyVIwwfvfY6oIQBwDaYHBQrUSNU"
|
||||
+ "sPNpW3qlVv8ZeqJAnLUFGa9-nyOYebNMHcd3vdnNu1btYgAyd7VFgYVuLmrJ5r2TAWg2qeArIaBxwlK0"
|
||||
+ "6RftrhFKaZZZ5ISMbBqk1uO4fLUYQEl13O0fD3D4yC304s4WAsMNDZ4YyDqVTvldBdMenzy-xM8S8jqb"
|
||||
+ "2L05X5DUK4qqM4U48-ij_l-vTuET-FD_hMcJKxkzzps4q1D8242u5neoBW0XdW9V7pRC0Pp2aX2T95ov"
|
||||
+ "Qkrv88h1JiPW5tNxCgDoutUMcv6Rrbu_LEMfAKM5atuW-qKmQAzpIPNkGz2fx77V-KQuoC7O_YMgp4fn"
|
||||
+ "xogZxPMHy4aeulYEqyi1pLWOe0Phe8u2_-x-h2pKDDP-HL9vE03vPaDIgPckHTMMriP6OAESsDzRirFE"
|
||||
+ "pC_Am3wxrONpgXxQ9Ybkf1XH-DOfBiy84pE9f8a8Ta_9YGSZVED1lgWMIs9fMxkTCLWX_sC_XZSI3jaX"
|
||||
+ "3JJgCQKytO0SjadtiLMWFuZt41x8mcATxYmMIoKyaY8fdAjO9ZAaJxGPv_O6CIWAn__t5fGhJ3G_eTcb"
|
||||
+ "TdQIkNHhDoaWyg7-pf9Qv6ojoC2-g-QopSjp-zOc4-pO_y2Fdsz_LDry4m4uegiIl6utyk765jKLR45v"
|
||||
+ "iuJxk2pMpUINSIdQ9Qg1pVlEHWsm6Iga98A81w12U8txDVq9Myu5yktrbxamKiFpU3NqpAUx0ol8DXfU"
|
||||
+ "9GsgNcHnR7s_vIRl7CYSU6nmOPMnqyES7YqprBQRDbl8e9AuSyLOps1sZv8gdygOLChGL8qDDKjYwxAp"
|
||||
+ "7Ps1yItaYlMzVMjZXfJw1VEPu1H3JKal3MG20Lb4Ke21v2hPhrfnXepCj4gynSfMqZ3LJMfej1iiYZjB" + "Ms7pORCrtdviIo40";
|
||||
public static final String DONORS = "6miF03mSRygAr4-2sU91UhPs3uiVqvmG9uBbUK9nOX6dku3u0zmxFUutqbz4LtRlcsP4hTScvGoY-Y3e"
|
||||
+ "0Uzk2-r3wNzz4EOiUH7ScH9SG0g8ukWI-P5kP3jzKcL82TvyX-vlcQmzsJek5ZMV4u6h02gHaD6SOhkN"
|
||||
+ "YNczGYgb-FoLZz1Fu6tww3nt6aMZ_XEuUTJsKUnzpVzDdMNdeH1cwMu5Hc1KD49rth77-FyKGOKes3bK"
|
||||
+ "mOubntGghLeELNICUL_N0dLCkbPDauygDQjYN5MaM4Od3Oj89jJbOl8nyg9F6h_Kc_3XkYeauzu1dMrr"
|
||||
+ "T7tJspRFnFppHH-2ZC4t53Km0jOZQHFDpqCF6aOE66fsuSOM5OuyYOT46hIGN_vGc48loTaLSDCmgG24"
|
||||
+ "nJjGWIG7rQdXRCTXG8KbjcYpyAYB_S7Ik2uhfp9TQNWYiJ4nKGkeKkH_q0tTKUjuD7NtC3WYFIKQOSjH"
|
||||
+ "FWjifHrMzFbPIWGBWCwOnVehH3cLr7GSpzg_Soq0kwNbLGzZ2dzEe2bBA9JnYGNgLw7Rve8jUkzoi906"
|
||||
+ "KH-7R_g8S-MXkWX7P4fPhQENiPrhcJzqsOBrINWABEGzxakn1HniYgigDO0lj0ffgVC992tpxwN7ot_V"
|
||||
+ "4wufb6IlNxGHhf3qquznCaCXGFkcCHkwYGABiIfMhSKMHB17wT00hOLa4CwHTjb7_99-vIS0tbn2T9kD"
|
||||
+ "G3tuzvUc31svI0C9NPN62c3rQKNTDCmUmQ1KKz7rHCMNtiQFhqnhx6EbiMfPjCdpHeCnyfjqcc9ZkK95"
|
||||
+ "XXaMwc7DcU_KbcYNucxfWrUz9tjT1RYKUG-vSUyN6V1p3nce59pkUCz7Rbc62OjPF7EzJEcPdqnk7hhn"
|
||||
+ "m5qiciQCClMGPS1WVoAgzP6eRnOZl-sGpSXh9Re7iBuA90SFCoh1woScLrHpJCDeaqLqR14YsToyufHT"
|
||||
+ "kRPWCozFagEYHChDLWz3Gdv7-YAYLT96gSFcV9VW6PAZ82_dtR7gCN-xOUe2AbCdWKzQi6PBQD-pBf21"
|
||||
+ "jOkUgPR4wVy-iI3lVJampL1y9Oas7jn0CGLcXd0V65WY6SXAnKkR617ulZ_kZXxnEjJZRvzECGwIRf8O"
|
||||
+ "g8A4arzGJTHPHuGJwpN-_wPFIrpuywyzRPDJlJtx7e9eCuWBG9WNw8gS5q8y1RusDam1dC8I5vqaNBbi"
|
||||
+ "xPL0b8ADzC4kwlPbHld6JvORaPlMNZzKuKzJZ0h7_K2s2r_HtkUIAjCNqwW6-yEx3XSv6FubgWo8vB8t"
|
||||
+ "CoiZKIR1nN4VfxKDpLWwG0tcG9q4djtzsMAXeR7sAvGgmmcGhpSabHfbMbWTqzBO2AoK4_jxQqxA6VNP"
|
||||
+ "6SJF7klCULKFTPCKrrECA7o7ISXJmiJC8d4YWjtYEIb13z_i8rzK2oMnjAdDpX2iaF--7yCR2GVia0SQ"
|
||||
+ "zOHIdcb13jkaUziiy4U2zn0ba8N5Cjr5B9JAU215KZ2NMyOpfA-q6QVs1j0f2iR_zmQKoqmqFwBPfNTr"
|
||||
+ "ahd2rdRY82h3_PubjYZPQf61VLVDPUkNvRRDJMROaV-17plV_AYwVX41DKHN9NZDQUJ3ZSrgQjYY_cOE"
|
||||
+ "zt6PhPl9p-DIj7DK0vlqPAE6iXaev2I4I0T2XVHL-5Nz2LlEEVBfVQeK1cfu7hiDFNYk1kR8LXfU9Gse"
|
||||
+ "NcHnR7s_uIPF3XHEJBR-LQUnqyEO7gqmrAQRDcl8e1AvIyLNZc1sSqcLjoecbJAyy-FUKBCajFQTxUZq"
|
||||
+ "JcuXbzTpFBqnWqlzakWpmJa6ch9U7CY41cGHMK4ZYAwI_Q8LPyYeBAl4HwfWc3ZQ4kxGQ3DOk3lMfw5i"
|
||||
+ "NZ5RuziaFZ126vR-nWNSUuP4pmKD8zkS06nO52cKX6OetMCGEs57p2vkUISVW_BMtW00";
|
||||
|
||||
/*
|
||||
* Special thanks to our sponsors and donors:
|
||||
|
@ -92,12 +92,17 @@ public class FontConfiguration {
|
||||
}
|
||||
|
||||
public static FontConfiguration create(ISkinParam skinParam, Style style) {
|
||||
return create(skinParam, style, null);
|
||||
}
|
||||
|
||||
public static FontConfiguration create(ISkinParam skinParam, Style style, Colors colors) {
|
||||
final HColor hyperlinkColor = style.value(PName.HyperLinkColor).asColor(skinParam.getThemeStyle(),
|
||||
skinParam.getIHtmlColorSet());
|
||||
final boolean useUnderlineForHyperlink = skinParam.useUnderlineForHyperlink();
|
||||
return create(style.getUFont(),
|
||||
style.value(PName.FontColor).asColor(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet()),
|
||||
hyperlinkColor, useUnderlineForHyperlink, skinParam.getTabSize());
|
||||
HColor color = colors == null ? null : colors.getColor(ColorType.TEXT);
|
||||
if (color == null)
|
||||
color = style.value(PName.FontColor).asColor(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
|
||||
return create(style.getUFont(), color, hyperlinkColor, useUnderlineForHyperlink, skinParam.getTabSize());
|
||||
}
|
||||
|
||||
// ---
|
||||
|
@ -166,12 +166,12 @@ public class Colors {
|
||||
}
|
||||
|
||||
public static UGraphic applyStroke(UGraphic ug, Colors colors) {
|
||||
if (colors == null) {
|
||||
if (colors == null)
|
||||
return ug;
|
||||
}
|
||||
if (colors.lineStyle == null) {
|
||||
|
||||
if (colors.lineStyle == null)
|
||||
return ug;
|
||||
}
|
||||
|
||||
return ug.apply(colors.lineStyle.getStroke3());
|
||||
}
|
||||
|
||||
|
@ -96,7 +96,7 @@ public class CommandArrow extends SingleLineCommand2<SequenceDiagram> {
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexOptional(new RegexOr("ARROW_DRESSING1", //
|
||||
new RegexLeaf("[%s][ox]"), //
|
||||
new RegexLeaf("(?:[%s][ox])?<<?_?"), //
|
||||
new RegexLeaf("(?:[%s][ox]|\\(\\d+\\))?<<?_?"), //
|
||||
new RegexLeaf("(?:[%s][ox])?//?"), //
|
||||
new RegexLeaf("(?:[%s][ox])?\\\\\\\\?"))), //
|
||||
new RegexOr(new RegexConcat( //
|
||||
@ -210,7 +210,8 @@ public class CommandArrow extends SingleLineCommand2<SequenceDiagram> {
|
||||
|
||||
final String dressing1 = getDressing(arg, "ARROW_DRESSING1");
|
||||
final String dressing2 = getDressing(arg, "ARROW_DRESSING2");
|
||||
final int inclination = getInclination(arg.get("ARROW_DRESSING2", 0));
|
||||
final int inclination1 = getInclination(arg.get("ARROW_DRESSING1", 0));
|
||||
final int inclination2 = getInclination(arg.get("ARROW_DRESSING2", 0));
|
||||
|
||||
final boolean circleAtStart;
|
||||
final boolean circleAtEnd;
|
||||
@ -288,7 +289,7 @@ public class CommandArrow extends SingleLineCommand2<SequenceDiagram> {
|
||||
|
||||
config = applyStyle(diagram.getSkinParam().getThemeStyle(), arg.getLazzy("ARROW_STYLE", 0), config);
|
||||
|
||||
config = config.withInclination(inclination);
|
||||
config = config.withInclination(inclination1 + inclination2);
|
||||
|
||||
final String activationSpec = arg.get("ACTIVATION", 0);
|
||||
|
||||
|
@ -187,8 +187,15 @@ public class Style {
|
||||
}
|
||||
|
||||
public FontConfiguration getFontConfiguration(ThemeStyle themeStyle, HColorSet set) {
|
||||
return getFontConfiguration(themeStyle, set, null);
|
||||
}
|
||||
|
||||
public FontConfiguration getFontConfiguration(ThemeStyle themeStyle, HColorSet set, Colors colors) {
|
||||
final UFont font = getUFont();
|
||||
final HColor color = value(PName.FontColor).asColor(themeStyle, set);
|
||||
HColor color = colors == null ? null : colors.getColor(ColorType.TEXT);
|
||||
if (color == null)
|
||||
color = value(PName.FontColor).asColor(themeStyle, set);
|
||||
|
||||
final HColor hyperlinkColor = value(PName.HyperLinkColor).asColor(themeStyle, set);
|
||||
return FontConfiguration.create(font, color, hyperlinkColor, true);
|
||||
}
|
||||
|
@ -665,9 +665,12 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
|
||||
|
||||
ug = ug.apply(new HColorNone().bg()).apply(color);
|
||||
final LinkType linkType = link.getType();
|
||||
UStroke stroke = suggestedStroke == null || linkType.getStyle().isNormal() == false
|
||||
? linkType.getStroke3(defaultThickness)
|
||||
: suggestedStroke;
|
||||
UStroke stroke;
|
||||
if (suggestedStroke == null || linkType.getStyle().isNormal() == false)
|
||||
stroke = linkType.getStroke3(defaultThickness);
|
||||
else
|
||||
stroke = linkType.getStroke3(suggestedStroke);
|
||||
|
||||
if (link.getColors() != null && link.getColors().getSpecificLineStroke() != null)
|
||||
stroke = link.getColors().getSpecificLineStroke();
|
||||
|
||||
|
@ -192,7 +192,7 @@ public class EntityImageClass extends AbstractEntityImage implements Stencil, Wi
|
||||
ug = ug.apply(classBorder);
|
||||
ug = ug.apply(backcolor.bg());
|
||||
|
||||
final UStroke stroke = getStyle().getStroke();
|
||||
final UStroke stroke = getStyle().getStroke(lineConfig.getColors());
|
||||
|
||||
UGraphic ugHeader = ug;
|
||||
if (roundCorner == 0 && headerBackcolor != null && backcolor.equals(headerBackcolor) == false) {
|
||||
|
@ -87,7 +87,7 @@ public class EntityImageClassHeader extends AbstractEntityImage {
|
||||
.withTOBECHANGED(stereotype) //
|
||||
.with(entity.getStereostyles()) //
|
||||
.getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||
FontConfiguration fontConfigurationName = FontConfiguration.create(skinParam, style);
|
||||
FontConfiguration fontConfigurationName = FontConfiguration.create(skinParam, style, entity.getColors());
|
||||
|
||||
if (italic)
|
||||
fontConfigurationName = fontConfigurationName.italic();
|
||||
|
@ -42,4 +42,6 @@ public interface Clocks {
|
||||
|
||||
public TimeTick getCodeValue(String code);
|
||||
|
||||
public TimingFormat getTimingFormatDate();
|
||||
|
||||
}
|
||||
|
@ -38,10 +38,12 @@ import java.awt.geom.Rectangle2D;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.math.BigDecimal;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
import net.sourceforge.plantuml.Dimension2DDouble;
|
||||
@ -389,4 +391,23 @@ public class TimingDiagram extends UmlDiagram implements Clocks {
|
||||
this.compactByDefault = true;
|
||||
}
|
||||
|
||||
private SimpleDateFormat sdf;
|
||||
|
||||
public CommandExecutionResult useDateFormat(String dateFormat) {
|
||||
try {
|
||||
this.sdf = new SimpleDateFormat(dateFormat, Locale.US);
|
||||
} catch (Exception e) {
|
||||
return CommandExecutionResult.error("Bad date format");
|
||||
}
|
||||
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimingFormat getTimingFormatDate() {
|
||||
if (sdf == null)
|
||||
return TimingFormat.DATE;
|
||||
return TimingFormat.create(sdf);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -65,6 +65,7 @@ import net.sourceforge.plantuml.timingdiagram.command.CommandRobustConcise;
|
||||
import net.sourceforge.plantuml.timingdiagram.command.CommandScalePixel;
|
||||
import net.sourceforge.plantuml.timingdiagram.command.CommandTicks;
|
||||
import net.sourceforge.plantuml.timingdiagram.command.CommandTimeMessage;
|
||||
import net.sourceforge.plantuml.timingdiagram.command.CommandUseDateFormat;
|
||||
|
||||
public class TimingDiagramFactory extends PSystemCommandFactory {
|
||||
|
||||
@ -100,6 +101,7 @@ public class TimingDiagramFactory extends PSystemCommandFactory {
|
||||
cmds.add(new CommandModeCompact());
|
||||
cmds.add(new CommandTicks());
|
||||
cmds.add(new CommandPixelHeight());
|
||||
cmds.add(new CommandUseDateFormat());
|
||||
|
||||
return cmds;
|
||||
}
|
||||
|
@ -35,24 +35,40 @@
|
||||
package net.sourceforge.plantuml.timingdiagram;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.TimeZone;
|
||||
|
||||
public enum TimingFormat {
|
||||
DECIMAL, HOUR, DATE;
|
||||
|
||||
public final class TimingFormat {
|
||||
private static final TimeZone GMT = TimeZone.getTimeZone("GMT");
|
||||
private static final GregorianCalendar gc = new GregorianCalendar(TimingFormat.GMT);
|
||||
|
||||
public static final TimingFormat DECIMAL = new TimingFormat(null);
|
||||
public static final TimingFormat HOUR = new TimingFormat(null);
|
||||
public static final TimingFormat DATE = new TimingFormat(null);
|
||||
|
||||
private final SimpleDateFormat sdf;
|
||||
|
||||
private TimingFormat(SimpleDateFormat sdf) {
|
||||
this.sdf = sdf;
|
||||
}
|
||||
|
||||
public static TimingFormat create(SimpleDateFormat sdf) {
|
||||
return new TimingFormat(sdf);
|
||||
}
|
||||
|
||||
public String formatTime(BigDecimal time) {
|
||||
if (this == HOUR || this == DATE) {
|
||||
if (this == HOUR || this == DATE || sdf != null)
|
||||
return formatTime(time.longValueExact());
|
||||
}
|
||||
|
||||
return time.toPlainString();
|
||||
}
|
||||
|
||||
public String formatTime(long time) {
|
||||
if (sdf != null)
|
||||
return sdf.format(time * 1000L);
|
||||
|
||||
if (this == HOUR) {
|
||||
final int s = (int) time % 60;
|
||||
final int m = (int) (time / 60) % 60;
|
||||
@ -75,14 +91,14 @@ public enum TimingFormat {
|
||||
return "" + time;
|
||||
}
|
||||
|
||||
public static TimeTick createDate(final int yyyy, final int mm, final int dd) {
|
||||
public static TimeTick createDate(int yyyy, int mm, int dd, TimingFormat format) {
|
||||
final long timeInMillis;
|
||||
synchronized (gc) {
|
||||
gc.setTimeInMillis(0);
|
||||
gc.set(yyyy, mm - 1, dd);
|
||||
timeInMillis = gc.getTimeInMillis() / 1000L;
|
||||
}
|
||||
return new TimeTick(new BigDecimal(timeInMillis), TimingFormat.DATE);
|
||||
return new TimeTick(new BigDecimal(timeInMillis), format);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -59,6 +59,7 @@ import net.sourceforge.plantuml.ugraphic.ULine;
|
||||
import net.sourceforge.plantuml.ugraphic.UStroke;
|
||||
import net.sourceforge.plantuml.ugraphic.UTranslate;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
|
||||
|
||||
public class TimingRuler {
|
||||
|
||||
@ -200,7 +201,14 @@ public class TimingRuler {
|
||||
if (timeAxisStategy == TimeAxisStategy.HIDDEN)
|
||||
return;
|
||||
|
||||
ug = ug.apply(new UStroke(2.0)).apply(black());
|
||||
final Style style = StyleSignatureBasic.of(SName.root, SName.timingDiagram, SName.timeline)
|
||||
.getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||
|
||||
final HColor color = style.value(PName.LineColor).asColor(skinParam.getThemeStyle(),
|
||||
skinParam.getIHtmlColorSet());
|
||||
final UStroke stroke = style.getStroke();
|
||||
|
||||
ug = ug.apply(stroke).apply(color);
|
||||
|
||||
if (timeAxisStategy == TimeAxisStategy.AUTOMATIC)
|
||||
drawTimeAxisAutomatic(ug);
|
||||
@ -254,15 +262,7 @@ public class TimingRuler {
|
||||
if (tick.equals(ent.getValue()))
|
||||
return ent.getKey();
|
||||
|
||||
return "";
|
||||
// return format.formatTime(tick.getTime());
|
||||
}
|
||||
|
||||
private HColor black() {
|
||||
final Style style = StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram)
|
||||
.getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||
return style.value(PName.LineColor).asColor(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
|
||||
|
||||
return format.formatTime(tick.getTime());
|
||||
}
|
||||
|
||||
private BigDecimal getFirstPositiveOrZeroValue() {
|
||||
|
@ -0,0 +1,71 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (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
|
||||
* under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* PlantUML distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
* USA.
|
||||
*
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.timingdiagram.command;
|
||||
|
||||
import net.sourceforge.plantuml.LineLocation;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
import net.sourceforge.plantuml.command.regex.IRegex;
|
||||
import net.sourceforge.plantuml.command.regex.RegexConcat;
|
||||
import net.sourceforge.plantuml.command.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.command.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.timingdiagram.TimingDiagram;
|
||||
|
||||
public class CommandUseDateFormat extends SingleLineCommand2<TimingDiagram> {
|
||||
|
||||
public CommandUseDateFormat() {
|
||||
super(getRegexConcat());
|
||||
}
|
||||
|
||||
private static IRegex getRegexConcat() {
|
||||
return RegexConcat.build(CommandUseDateFormat.class.getName(), RegexLeaf.start(), //
|
||||
new RegexLeaf("use"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("date"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("format"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("FORMAT", "[%g]([^%g]+)[%g]"), //
|
||||
RegexLeaf.end());
|
||||
}
|
||||
|
||||
@Override
|
||||
final protected CommandExecutionResult executeArg(TimingDiagram diagram, LineLocation location, RegexResult arg) {
|
||||
final String format = arg.get("FORMAT", 0);
|
||||
return diagram.useDateFormat(format);
|
||||
}
|
||||
|
||||
}
|
@ -72,9 +72,9 @@ public class TimeTickBuilder {
|
||||
if (code != null) {
|
||||
final String delta = arg.get(name + "CODE", 1);
|
||||
TimeTick result = clock.getCodeValue(code);
|
||||
if (delta == null) {
|
||||
if (delta == null)
|
||||
return result;
|
||||
}
|
||||
|
||||
final BigDecimal value = result.getTime().add(new BigDecimal(delta));
|
||||
return new TimeTick(value, TimingFormat.DECIMAL);
|
||||
}
|
||||
@ -97,17 +97,17 @@ public class TimeTickBuilder {
|
||||
final int mm = Integer.parseInt(arg.get(name + "DATE", 1));
|
||||
final int dd = Integer.parseInt(arg.get(name + "DATE", 2));
|
||||
|
||||
return TimingFormat.createDate(yy, mm, dd);
|
||||
return TimingFormat.createDate(yy, mm, dd, clock.getTimingFormatDate());
|
||||
}
|
||||
final String number = arg.get(name + "DIGIT", 1);
|
||||
if (number == null) {
|
||||
if (number == null)
|
||||
return clock.getNow();
|
||||
}
|
||||
|
||||
final boolean isRelative = "+".equals(arg.get(name + "DIGIT", 0));
|
||||
BigDecimal value = new BigDecimal(number);
|
||||
if (isRelative && clock.getNow() != null) {
|
||||
if (isRelative && clock.getNow() != null)
|
||||
value = clock.getNow().getTime().add(value);
|
||||
}
|
||||
|
||||
return new TimeTick(value, TimingFormat.DECIMAL);
|
||||
}
|
||||
|
||||
|
@ -80,7 +80,7 @@ public class Version {
|
||||
}
|
||||
|
||||
public static int beta() {
|
||||
final int beta = 2;
|
||||
final int beta = 4;
|
||||
return beta;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user