CVE-2022-1379 (Java, published 2022-05-14T10:15Z)
Description: value: URL Restriction Bypass in GitHub repository plantuml/plantuml prior to V1.2022.5. An attacker can abuse this to bypass URL restrictions that are imposed by the different security profiles and achieve server side request forgery (SSRF). This allows accessing restricted internal resources/servers or sending requests to third party servers.
Severity: MEDIUM (CVSS v3 base score: 9.1)
Weakness: CWE-918 \u2014 Server-Side Request Forgery (SSRF)
The web server receives a URL or similar request from an upstream component and retrieves the contents of this URL, but it does not sufficiently ensure that the request is being sent to the expected destination.
Repository: https://github.com/plantuml/plantuml
Files changed:
build.xml
skin/plantuml.skin
skin/rose.skin
src/net/sourceforge/plantuml/SkinParam.java
src/net/sourceforge/plantuml/elk/CucaDiagramFileMakerElk.java
src/net/sourceforge/plantuml/security/SURL.java
src/net/sourceforge/plantuml/style/CommandStyleMultilinesCSS.java
src/net/sourceforge/plantuml/style/Context.java
src/net/sourceforge/plantuml/style/FromSkinparamToStyle.java
src/net/sourceforge/plantuml/style/StyleLoader.java
src/net/sourceforge/plantuml/svek/Boundary.java
src/net/sourceforge/plantuml/svek/CircleInterface2.java
src/net/sourceforge/plantuml/svek/Cluster.java
src/net/sourceforge/plantuml/svek/ClusterPosition.java
src/net/sourceforge/plantuml/svek/ConcurrentStateImage.java
src/net/sourceforge/plantuml/svek/Control.java
src/net/sourceforge/plantuml/svek/CucaDiagramFileMakerSvek2InternalImage.java
src/net/sourceforge/plantuml/svek/DecorateEntityImage.java
src/net/sourceforge/plantuml/svek/DecorateEntityImage3.java
src/net/sourceforge/plantuml/svek/DirectionalTextBlock.java
src/net/sourceforge/plantuml/svek/EntityDomain.java
src/net/sourceforge/plantuml/svek/EntityImageDegenerated.java
src/net/sourceforge/plantuml/svek/EntityImageProtected.java
src/net/sourceforge/plantuml/svek/GeneralImageBuilder.java
src/net/sourceforge/plantuml/svek/GraphvizCrash.java
src/net/sourceforge/plantuml/svek/GroupPngMakerState.java
src/net/sourceforge/plantuml/svek/HeaderLayout.java
src/net/sourceforge/plantuml/svek/InnerActivity.java
src/net/sourceforge/plantuml/svek/InnerStateAutonom.java
src/net/sourceforge/plantuml/svek/PackageStyle.java
src/net/sourceforge/plantuml/svek/RoundedContainer.java
src/net/sourceforge/plantuml/svek/RoundedNorth.java
src/net/sourceforge/plantuml/svek/RoundedSouth.java
src/net/sourceforge/plantuml/svek/SvekLine.java
src/net/sourceforge/plantuml/svek/SvekNode.java
src/net/sourceforge/plantuml/svek/SvekResult.java
src/net/sourceforge/plantuml/svek/image/AbstractEntityImageBorder.java
src/net/sourceforge/plantuml/svek/image/EntityImageActivity.java
src/net/sourceforge/plantuml/svek/image/EntityImageArcCircle.java
src/net/sourceforge/plantuml/svek/image/EntityImageAssociation.java
src/net/sourceforge/plantuml/svek/image/EntityImageAssociationPoint.java
src/net/sourceforge/plantuml/svek/image/EntityImageBranch.java
src/net/sourceforge/plantuml/svek/image/EntityImageCircleEnd.java
src/net/sourceforge/plantuml/svek/image/EntityImageCircleStart.java
src/net/sourceforge/plantuml/svek/image/EntityImageClass.java
src/net/sourceforge/plantuml/svek/image/EntityImageClassHeader.java
src/net/sourceforge/plantuml/svek/image/EntityImageEmptyPackage.java
src/net/sourceforge/plantuml/svek/image/EntityImageGroup.java
src/net/sourceforge/plantuml/svek/image/EntityImageJson.java
src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterface.java
src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye1.java
src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye2.java
src/net/sourceforge/plantuml/svek/image/EntityImageNote.java
src/net/sourceforge/plantuml/svek/image/EntityImageNoteLink.java
src/net/sourceforge/plantuml/svek/image/EntityImagePort.java
src/net/sourceforge/plantuml/svek/image/EntityImagePseudoState.java
src/net/sourceforge/plantuml/svek/image/EntityImageState.java
src/net/sourceforge/plantuml/svek/image/EntityImageState2.java
src/net/sourceforge/plantuml/svek/image/EntityImageStateBorder.java
src/net/sourceforge/plantuml/svek/image/EntityImageStateCommon.java
src/net/sourceforge/plantuml/svek/image/EntityImageStateEmptyDescription.java
src/net/sourceforge/plantuml/svek/image/EntityImageSynchroBar.java
src/net/sourceforge/plantuml/svek/image/EntityImageTips.java
src/net/sourceforge/plantuml/svek/image/EntityImageUseCase.java
src/net/sourceforge/plantuml/svek/image/Footprint.java
src/net/sourceforge/plantuml/svek/image/Opale.java
src/net/sourceforge/plantuml/svg/SvgGraphics.java
src/net/sourceforge/plantuml/timingdiagram/ChangeState.java
src/net/sourceforge/plantuml/timingdiagram/Player.java
src/net/sourceforge/plantuml/timingdiagram/PlayerAnalog.java
src/net/sourceforge/plantuml/timingdiagram/PlayerBinary.java
src/net/sourceforge/plantuml/timingdiagram/PlayerClock.java
src/net/sourceforge/plantuml/timingdiagram/PlayerRobustConcise.java
src/net/sourceforge/plantuml/timingdiagram/TimeConstraint.java
src/net/sourceforge/plantuml/timingdiagram/TimingDiagram.java
src/net/sourceforge/plantuml/timingdiagram/TimingRuler.java
src/net/sourceforge/plantuml/timingdiagram/command/CommandBinary.java
src/net/sourceforge/plantuml/timingdiagram/command/CommandRobustConcise.java
src/net/sourceforge/plantuml/timingdiagram/graphic/PlayerFrame.java
src/net/sourceforge/plantuml/timingdiagram/graphic/Ribbon.java
src/net/sourceforge/plantuml/timingdiagram/graphic/TimeArrow.java
src/net/sourceforge/plantuml/ugraphic/UImageSvg.java
src/net/sourceforge/plantuml/ugraphic/color/HColorUtils.java
src/net/sourceforge/plantuml/ugraphic/hand/UPathHand.java
src/net/sourceforge/plantuml/version/Version.java
stdlib/classy-c4-dex.repx
stdlib/classy-dex.repx
stdlib/domainstory-dex.repx
stdlib/home.repx
Commit message: Import version 1.2022.5


Vulnerable code:
		<javac target="1.7" source="1.7" srcdir="src" destdir="build" debug="on" />
      LineThickness 2
		key = key.replaceAll("_|\\.|\\s", "");
			final UStroke stroke = Cluster.getStrokeInternal(group, skinParam, style);
	private static final Pattern PATTERN_USERINFO = Pattern.compile("(^https?://)([-_:0-9a-zA-Z]+@)([^@]*)");
import net.sourceforge.plantuml.UseStyle;
					tmp.add(ss.add(name));
		addConvert(cleanName + "StereotypeFontColor", PName.FontColor, SName.stereotype, sname);
			this.stereo = st.hasMoreTokens() ? st.nextToken() : null;
				String names = mKeyNames.group(1).replace(" ", "");
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.skin.rose.Rose;
import net.sourceforge.plantuml.style.StyleSignature;
	public void drawU(UGraphic ug, UmlDiagramType umlDiagramType, ISkinParam skinParam2) {
		Style style = null;
		final double rounded;
		final double diagonalCorner;
		final double shadowing;
		if (UseStyle.useBetaStyle()) {
			final USymbol uSymbol = group.getUSymbol() == null ? USymbols.PACKAGE : group.getUSymbol();
			final StyleSignatureBasic tmp = getDefaultStyleDefinition(umlDiagramType.getStyleName(), uSymbol);
			style = tmp.withTOBECHANGED(group.getStereotype()).getMergedStyle(skinParam.getCurrentStyleBuilder());
			shadowing = style.value(PName.Shadowing).asDouble();
			if (group.getColors().getColor(ColorType.LINE) != null)
				borderColor = group.getColors().getColor(ColorType.LINE);
			else
				borderColor = style.value(PName.LineColor).asColor(skinParam2.getThemeStyle(),
						skinParam2.getIHtmlColorSet());
			rounded = style.value(PName.RoundCorner).asDouble();
			diagonalCorner = style.value(PName.DiagonalCorner).asDouble();

		} else {
			if (group.getUSymbol() == null)
				shadowing = skinParam2.shadowing2(group.getStereotype(), USymbols.PACKAGE.getSkinParameter()) ? 3 : 0;
			else
				shadowing = skinParam2.shadowing2(group.getStereotype(), group.getUSymbol().getSkinParameter()) ? 3 : 0;

			rounded = IEntityImage.CORNER;
			if (umlDiagramType == UmlDiagramType.STATE)
				borderColor = getColor(ColorParam.stateBorder, skinParam, group.getStereotype());
			else if (umlDiagramType == UmlDiagramType.ACTIVITY)
				borderColor = getColor(ColorParam.packageBorder, skinParam, group.getStereotype());
			else
				borderColor = getColor(ColorParam.packageBorder, skinParam, group.getStereotype());
			diagonalCorner = 0;

		}
				UStroke strokeForState = getDefaultStyleDefinition(SName.stateDiagram, null)
						.getMergedStyle(skinParam.getCurrentStyleBuilder()).getStroke();
				if (group.getColors().getSpecificLineStroke() != null)
					strokeForState = group.getColors().getSpecificLineStroke();

				if (group.getColors().getColor(ColorType.LINE) != null)
					borderColor = group.getColors().getColor(ColorType.LINE);

				drawUState(ug, borderColor, skinParam2, strokeForState, umlDiagramType, rounded, shadowing);
				packageStyle = skinParam2.packageStyle();
				final HColor tmp = skinParam2.getHtmlColor(border, group.getStereotype(), false);
			final UStroke stroke;
			if (UseStyle.useBetaStyle())
				stroke = getStrokeInternal(group, skinParam2, style);
			else
				stroke = getStrokeInternal(group, skinParam2, null);
			backColor = getBackColor(backColor, skinParam2, group.getStereotype(), umlDiagramType.getStyleName(),
				final double roundCorner;
				if (UseStyle.useBetaStyle())
					roundCorner = rounded;
				else
					roundCorner = group.getUSymbol() == null ? 0
							: group.getUSymbol().getSkinParameter().getRoundCorner(skinParam, group.getStereotype());

				decoration.drawU(ug, backColor, borderColor, shadowing, roundCorner,
						skinParam2.getHorizontalAlignment(AlignmentParam.packageTitleAlignment, null, false, null),
						skinParam2.getStereotypeAlignment(), diagonalCorner);
	static public UStroke getStrokeInternal(IGroup group, ISkinParam skinParam, Style style) {
		if (style != null)
			return style.getStroke();

		if (group.getUSymbol() != null && group.getUSymbol() != USymbols.PACKAGE)
			return group.getUSymbol().getSkinParameter().getStroke(skinParam, group.getStereotype());

		return GeneralImageBuilder.getForcedStroke(group.getStereotype(), skinParam);
	private HColor getColorLegacy(ISkinParam skinParam, ColorParam colorParam, Stereotype stereo) {
		return new Rose().getHtmlColor(skinParam, stereo, colorParam);
	private void drawUState(UGraphic ug, HColor borderColor, ISkinParam skinParam2, UStroke stroke,
			UmlDiagramType umlDiagramType, double rounded, double shadowing) {
		HColor stateBack = getBackColor(umlDiagramType, styleGroup);
		if (UseStyle.useBetaStyle() == false && stateBack == null)
			stateBack = getColorLegacy(skinParam2, ColorParam.stateBackground, group.getStereotype());
		final HColor background;
		if (UseStyle.useBetaStyle() == false)
			background = getColorLegacy(skinParam2, ColorParam.background, null);
		else
			background = stateBack;
		final TextBlock attribute = GeneralImageBuilder.stateHeader(group, styleGroup, skinParam2);
				attributeHeight + (attributeHeight > 0 ? IEntityImage.MARGIN : 0), borderColor, stateBack, background,
		if (UseStyle.useBetaStyle())
			return style.value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());

		final USymbol sym = group.getUSymbol() == null ? USymbols.PACKAGE : group.getUSymbol();
		final ColorParam backparam = umlDiagramType == UmlDiagramType.ACTIVITY ? ColorParam.partitionBackground
				: sym.getColorParamBack();
		final HColor c1 = skinParam.getHtmlColor(backparam, stereo, false);
		if (c1 != null)
			return c1;

		if (parentCluster == null)
			return null;

		return parentCluster.getBackColor(umlDiagramType, style);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.style.StyleSignature;
		final FontConfiguration fontConfiguration;
		if (UseStyle.useBetaStyle()) {
			final SName sname = dotData.getUmlDiagramType().getStyleName();
			final StyleSignatureBasic signature;
			final USymbol uSymbol = g.getUSymbol();
			if (uSymbol == USymbols.RECTANGLE)
				signature = StyleSignatureBasic.of(SName.root, SName.element, sname, uSymbol.getSName(), SName.title);
			else
				signature = StyleSignatureBasic.of(SName.root, SName.element, sname, SName.title);
			final Style style = signature //
					.withTOBECHANGED(g.getStereotype()) //
					.with(g.getStereostyles()) //
					.getMergedStyle(skinParam.getCurrentStyleBuilder());
			fontConfiguration = style.getFontConfiguration(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
		} else
			fontConfiguration = g.getFontConfigurationForTitle(skinParam);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.ColorParam;
import net.sourceforge.plantuml.FontParam;
import net.sourceforge.plantuml.UseStyle;
import net.sourceforge.plantuml.skin.rose.Rose;
		return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state).withTOBECHANGED(group.getStereotype())
				.getMergedStyle(diagram.getSkinParam().getCurrentStyleBuilder());
		final FontConfiguration fontConfiguration;
		final double rounded;
		double shadowing = 0;

		if (UseStyle.useBetaStyle()) {
			rounded = getStyleState().value(PName.RoundCorner).asDouble();
			shadowing = getStyleState().value(PName.Shadowing).asDouble();
			fontConfiguration = getStyleStateHeader().getFontConfiguration(skinParam.getThemeStyle(),
					skinParam.getIHtmlColorSet());
		} else {
			rounded = IEntityImage.CORNER;
			fontConfiguration = FontConfiguration.create(skinParam, FontParam.STATE, group.getStereotype());
			if (skinParam.shadowing(group.getStereotype()))
				shadowing = 3.0;
		}

			if (UseStyle.useBetaStyle())
				borderColor = getStyleState().value(PName.LineColor).asColor(skinParam.getThemeStyle(),
						skinParam.getIHtmlColorSet());
			else
				borderColor = getColor(ColorParam.stateBorder, group.getStereotype());
		final HColor tmp = group.getColors().getColor(ColorType.BACK);
		final HColor backColor;
		if (tmp == null)
			if (UseStyle.useBetaStyle())
				backColor = getStyleState().value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
						skinParam.getIHtmlColorSet());
			else
				backColor = getColor(ColorParam.stateBackground, stereo);
		else
			backColor = tmp;
			if (UseStyle.useBetaStyle())
				stroke = getStyleState().getStroke();
			else
				stroke = new UStroke(1.5);
	private final Rose rose = new Rose();

	private HColor getColor(ColorParam colorParam, Stereotype stereo) {
		final ISkinParam skinParam = diagram.getSkinParam();
		return rose.getHtmlColor(skinParam, stereo, colorParam);
	}
import net.sourceforge.plantuml.awt.geom.Dimension2D;


import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;

		if (dim.getWidth() == 0) {
		}
		ug = ug.apply(backColor.bg()).apply(borderColor);
		rect.setDeltaShadow(shadowing);
		ug.apply(stroke).draw(rect);

		final double yLine = titleHeight + attributeHeight;
		ug = ug.apply(imgBackcolor.bg());
		final double thickness = stroke.getThickness();
		final URectangle inner = new URectangle(dim.getWidth() - 4 * thickness,
				dim.getHeight() - titleHeight - 4 * thickness - attributeHeight).rounded(rounded);
		ug.apply(imgBackcolor).apply(new UTranslate(2 * thickness, yLine + 2 * thickness)).draw(inner);
		if (titleHeight > 0) {
			ug.apply(stroke).apply(UTranslate.dy(yLine)).draw(ULine.hline(dim.getWidth()));
		}
		if (attributeHeight > 0) {
			ug.apply(stroke).apply(UTranslate.dy(yLine - attributeHeight)).draw(ULine.hline(dim.getWidth()));
		}
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.style.StyleSignature;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.style.StyleSignature;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.style.StyleSignature;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import java.util.EnumMap;
import java.util.Map;

import net.sourceforge.plantuml.ugraphic.UGroupType;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.style.StyleSignature;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import java.util.Collection;
import java.util.LinkedHashSet;
			final String svgHeader = "<svg height=\"" + (int) (image.getHeight() * scale) + "\" width=\""
					+ (int) (image.getWidth() * scale) + "\" xmlns=\"http://www.w3.org/2000/svg\" >";
		if (states.length == 0) {
		}
		if (colors == null || colors.getColor(ColorType.BACK) == null) {
			if (UseStyle.useBetaStyle() == false)
				return HColorUtils.COL_D7E0F2;

		}
		if (colors == null || colors.getColor(ColorType.LINE) == null) {
			if (UseStyle.useBetaStyle() == false)
				return HColorUtils.COL_038048;

		}
				.withStroke(new UStroke(1.5));
import net.sourceforge.plantuml.FontParam;
import net.sourceforge.plantuml.UseStyle;
import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
	public Player(String title, ISkinParam skinParam, TimingRuler ruler, boolean compact) {
	protected abstract StyleSignatureBasic getStyleSignature();

	protected abstract SymbolContext getContextLegacy();
//	private StyleSignature getStyleSignature() {
//		return StyleSignature.of(SName.root, SName.element, SName.timingDiagram);
//	}

		if (UseStyle.useBetaStyle() == false)
			return FontConfiguration.create(skinParam, FontParam.TIMING, null);
		return FontConfiguration.create(skinParam, StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram)
				.getMergedStyle(skinParam.getCurrentStyleBuilder()));
		if (UseStyle.useBetaStyle() == false)
			return getContextLegacy();
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.graphic.SymbolContext;
import net.sourceforge.plantuml.ugraphic.UStroke;
import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
		super(code, skinParam, ruler, compact);
	@Override
	protected SymbolContext getContextLegacy() {
		return new SymbolContext(HColorUtils.COL_D7E0F2, HColorUtils.COL_038048).withStroke(new UStroke(1.5));
	}

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.graphic.SymbolContext;
import net.sourceforge.plantuml.style.PName;
import net.sourceforge.plantuml.style.Style;
import net.sourceforge.plantuml.ugraphic.UStroke;
import net.sourceforge.plantuml.ugraphic.color.HColor;
import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
	private final Style style;
	public PlayerBinary(String code, ISkinParam skinParam, TimingRuler ruler, boolean compact) {
		super(code, skinParam, ruler, compact);
		this.style = getStyleSignature().getMergedStyle(skinParam.getCurrentStyleBuilder());
	protected StyleSignatureBasic getStyleSignature() {
		return StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram, SName.binary);
	}

	@Override
	protected SymbolContext getContextLegacy() {

		if (UseStyle.useBetaStyle() == false)
			return new SymbolContext(HColorUtils.COL_D7E0F2, HColorUtils.COL_038048).withStroke(new UStroke(2));

		final HColor lineColor = style.value(PName.LineColor).asColor(skinParam.getThemeStyle(),
				skinParam.getIHtmlColorSet());
		final HColor backgroundColor = style.value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
				skinParam.getIHtmlColorSet());

		return new SymbolContext(backgroundColor, lineColor).withStroke(getStroke());

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.FontParam;
import net.sourceforge.plantuml.UseStyle;
import net.sourceforge.plantuml.graphic.FontConfiguration;
import net.sourceforge.plantuml.graphic.SymbolContext;
import net.sourceforge.plantuml.style.Style;
import net.sourceforge.plantuml.ugraphic.UStroke;
import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
		super(title, skinParam, ruler, compact);
	@Override
	protected SymbolContext getContextLegacy() {
		return new SymbolContext(HColorUtils.COL_D7E0F2, HColorUtils.COL_038048).withStroke(new UStroke(1.5));
	}

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.graphic.SymbolContext;
	public PlayerRobustConcise(TimingStyle type, String full, ISkinParam skinParam, TimingRuler ruler,
			boolean compact) {
		super(full, skinParam, ruler, compact);
	protected StyleSignatureBasic getStyleSignature() {
			return StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram, SName.concise);
			return StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram, SName.robust);
	@Override
	protected SymbolContext getContextLegacy() {
		throw new UnsupportedOperationException();
	}

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
	public CommandExecutionResult createRobustConcise(String code, String full, TimingStyle type, boolean compact) {
		final Player player = new PlayerRobustConcise(type, full, getSkinParam(), ruler, compactByDefault || compact);
	public CommandExecutionResult createBinary(String code, String full, boolean compact) {
		final Player player = new PlayerBinary(full, getSkinParam(), ruler, compactByDefault);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.ugraphic.color.HColorSimple;
				new RegexLeaf("CODE", "([%pLN_.@]+)"), RegexLeaf.end());
		return diagram.createBinary(code, full, compact != null);
		if (full == null) {
		}
		return diagram.createRobustConcise(code, full, type, compact != null);
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
		if (color instanceof HColorGradient) {
		}
		if (color == null) {
		}
		if (back == TRANSPARENT) {
		}
		if (back instanceof HColorBackground && ((HColorBackground) back).getBack() == TRANSPARENT) {
		}
		if (back instanceof HColorSimple && ((HColorSimple) back).isTransparent()) {
		}
		if (completion == 0) {
		}
		if (completion == 100) {
		}
		if (color1 instanceof HColorSimple && color2 instanceof HColorSimple) {
		}
				for (USegment seg2 : jiggle.toUPath()) {
					if (seg2.getSegmentType() == USegmentType.SEG_LINETO) {
					}
				}
		return 1202204;
		final int beta = 1;
		return 1649510957985L;
azure
tupadr3
c4
kubernetes
logos
elastic
archimate

Fixed code:
		<javac target="1.8" source="1.8" srcdir="src" destdir="build" debug="on" />
      LineThickness 1.5
componentDiagram {
  node, rectangle {
    LineColor black
    LineThickness 1.5
  }
}


      LineThickness 1.5
		key = key.replaceAll("_|\\.", "");
			final UStroke stroke = Cluster.getStrokeInternal(group, style);
	private static final Pattern PATTERN_USERINFO = Pattern.compile("(^https?://)([-_0-9a-zA-Z]+@)([^@]*)");
					tmp.add(ss.add(name.trim()));
		
		
//		addConvert("nodeStereotypeFontSize", PName.FontSize, SName.node, SName.stereotype);
//		addConvert("sequenceStereotypeFontSize", PName.FontSize, SName.stereotype);
//		addConvert("sequenceStereotypeFontStyle", PName.FontStyle, SName.stereotype);
//		addConvert("sequenceStereotypeFontColor", PName.FontColor, SName.stereotype);
//		addConvert("sequenceStereotypeFontName", PName.FontName, SName.stereotype);

		addConvert(cleanName + "Shadowing", PName.Shadowing, sname);
		
		addConvert(cleanName + "StereotypeFontSize", PName.FontSize, SName.stereotype, sname);
		addConvert(cleanName + "StereotypeFontStyle", PName.FontStyle, SName.stereotype, sname);
		addConvert(cleanName + "StereotypeFontColor", PName.FontColor, SName.stereotype, sname);
		addConvert(cleanName + "StereotypeFontName", PName.FontName, SName.stereotype, sname);

			this.stereo = st.hasMoreTokens() ? st.nextToken().trim() : null;
		if (key.endsWith("shadowing")) {
			if (value.equalsIgnoreCase("false"))
				value = "0";
			else if (value.equalsIgnoreCase("true"))
				value = "3";
		}
				String names = mKeyNames.group(1);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.style.StyleSignature;
	public void drawU(UGraphic ug, UmlDiagramType umlDiagramType, ISkinParam skinParam2unused) {
		final USymbol uSymbol = group.getUSymbol() == null ? USymbols.PACKAGE : group.getUSymbol();
		Style style = getDefaultStyleDefinition(umlDiagramType.getStyleName(), uSymbol)
				.withTOBECHANGED(group.getStereotype()).getMergedStyle(skinParam.getCurrentStyleBuilder());
		final double shadowing = style.value(PName.Shadowing).asDouble();
		if (group.getColors().getColor(ColorType.LINE) != null)
			borderColor = group.getColors().getColor(ColorType.LINE);
		else
			borderColor = style.value(PName.LineColor).asColor(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
		final double rounded = style.value(PName.RoundCorner).asDouble();
		final double diagonalCorner = style.value(PName.DiagonalCorner).asDouble();
				drawUState(ug, umlDiagramType, rounded, shadowing);
				packageStyle = skinParam.packageStyle();
				final HColor tmp = skinParam.getHtmlColor(border, group.getStereotype(), false);
			final UStroke stroke = getStrokeInternal(group, style);
			backColor = getBackColor(backColor, skinParam, group.getStereotype(), umlDiagramType.getStyleName(),
				decoration.drawU(ug, backColor, borderColor, shadowing, rounded,
						skinParam.getHorizontalAlignment(AlignmentParam.packageTitleAlignment, null, false, null),
						skinParam.getStereotypeAlignment(), diagonalCorner);
	static public UStroke getStrokeInternal(IGroup group, Style style) {
		return style.getStroke();
	// GroupPngMakerState
	private Style getStyleStateHeader() {
		return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state, SName.header)
				.withTOBECHANGED(group.getStereotype()).getMergedStyle(skinParam.getCurrentStyleBuilder());
	private Style getStyleState() {
		return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state)
				.withTOBECHANGED(group.getStereotype()).getMergedStyle(skinParam.getCurrentStyleBuilder());
	}
	// GroupPngMakerState

	private void drawUState(UGraphic ug, UmlDiagramType umlDiagramType, double rounded, double shadowing) {
		HColor borderColor = group.getColors().getColor(ColorType.LINE);
		if (borderColor == null)
			borderColor = getStyleState().value(PName.LineColor).asColor(skinParam.getThemeStyle(),
					skinParam.getIHtmlColorSet());
		HColor backColor = group.getColors().getColor(ColorType.BACK);
		if (backColor == null)
			backColor = getStyleState().value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
					skinParam.getIHtmlColorSet());

		final HColor imgBackcolor = getBackColor(umlDiagramType, styleGroup);
		final TextBlock attribute = GeneralImageBuilder.stateHeader(group, styleGroup, skinParam);

		UStroke stroke = group.getColors().getSpecificLineStroke();
		if (stroke == null)
			stroke = getStyleState().getStroke();

				attributeHeight + (attributeHeight > 0 ? IEntityImage.MARGIN : 0), borderColor, backColor, imgBackcolor,
		return style.value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());

//		final USymbol sym = group.getUSymbol() == null ? USymbols.PACKAGE : group.getUSymbol();
//		final ColorParam backparam = umlDiagramType == UmlDiagramType.ACTIVITY ? ColorParam.partitionBackground
//				: sym.getColorParamBack();
//		final HColor c1 = skinParam.getHtmlColor(backparam, stereo, false);
//		if (c1 != null)
//			return c1;
//
//		if (parentCluster == null)
//			return null;
//
//		return parentCluster.getBackColor(umlDiagramType, style);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.style.StyleSignature;
		final SName sname = dotData.getUmlDiagramType().getStyleName();
		final StyleSignatureBasic signature;
		final USymbol uSymbol = g.getUSymbol();
		if (g.getGroupType() == GroupType.STATE)
			signature = StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state,
					SName.header);
		else if (uSymbol == USymbols.RECTANGLE)
			signature = StyleSignatureBasic.of(SName.root, SName.element, sname, uSymbol.getSName(), SName.title);
		else
			signature = StyleSignatureBasic.of(SName.root, SName.element, sname, SName.title);

		final Style style = signature //
				.withTOBECHANGED(g.getStereotype()) //
				.with(g.getStereostyles()) //
				.getMergedStyle(skinParam.getCurrentStyleBuilder());

		final FontConfiguration fontConfiguration = style.getFontConfiguration(skinParam.getThemeStyle(),
				skinParam.getIHtmlColorSet());
import net.sourceforge.plantuml.awt.geom.Dimension2D;
		return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state)
				.withTOBECHANGED(group.getStereotype()).getMergedStyle(diagram.getSkinParam().getCurrentStyleBuilder());
		final double rounded = getStyleState().value(PName.RoundCorner).asDouble();
		final double shadowing = getStyleState().value(PName.Shadowing).asDouble();
		final FontConfiguration fontConfiguration = getStyleStateHeader()
				.getFontConfiguration(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
			borderColor = getStyleState().value(PName.LineColor).asColor(skinParam.getThemeStyle(),
					skinParam.getIHtmlColorSet());
		HColor backColor = group.getColors().getColor(ColorType.BACK);
		if (backColor == null)
			backColor = getStyleState().value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
					skinParam.getIHtmlColorSet());
			stroke = getStyleState().getStroke();
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.ugraphic.UPath;
import net.sourceforge.plantuml.ugraphic.UShape;
import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
		if (dim.getWidth() == 0)

		ug = ug.apply(backColor.bg()).apply(borderColor).apply(stroke);
		if (shadowing > 0) {
			rect.setDeltaShadow(shadowing);
			ug.apply(HColorUtils.transparent().bg()).draw(rect);
			rect.setDeltaShadow(0);
			
		}
		final double headerHeight = titleHeight + attributeHeight;
		new RoundedNorth(dim.getWidth(), headerHeight, backColor, rounded).drawU(ug);
		new RoundedSouth(dim.getWidth(), dim.getHeight() - headerHeight, imgBackcolor, rounded)
				.drawU(ug.apply(UTranslate.dy(headerHeight)));
		ug.apply(HColorUtils.transparent().bg()).draw(rect);
		if (headerHeight > 0)
			ug.apply(UTranslate.dy(headerHeight)).draw(ULine.hline(dim.getWidth()));
		if (attributeHeight > 0)
			ug.apply(UTranslate.dy(titleHeight)).draw(ULine.hline(dim.getWidth()));
/* ========================================================================
 * 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.svek;

import net.sourceforge.plantuml.graphic.UDrawable;
import net.sourceforge.plantuml.ugraphic.UGraphic;
import net.sourceforge.plantuml.ugraphic.UPath;
import net.sourceforge.plantuml.ugraphic.URectangle;
import net.sourceforge.plantuml.ugraphic.UShape;
import net.sourceforge.plantuml.ugraphic.UStroke;
import net.sourceforge.plantuml.ugraphic.color.HColor;
import net.sourceforge.plantuml.ugraphic.color.HColorUtils;

public final class RoundedNorth implements UDrawable {

	private final double width;
	private final double height;
	private final HColor backColor;
	private final double rounded;

	public RoundedNorth(double width, double height, HColor backColor, double rounded) {
		if (width == 0)
			throw new IllegalArgumentException();
		if (height == 0)
			throw new IllegalArgumentException();

		this.width = width;
		this.height = height;
		this.rounded = rounded;
		this.backColor = backColor;
	}

	public void drawU(UGraphic ug) {
		if (HColorUtils.isTransparent(backColor))
			return;

		final UShape header;
		if (rounded == 0) {
			header = new URectangle(width, height);
		} else {
			final UPath path = new UPath();
			path.moveTo(rounded / 2, 0);
			path.lineTo(width - rounded / 2, 0);
			path.arcTo(rounded / 2, rounded / 2, 0, 0, 1, width, rounded / 2);
			path.lineTo(width, height);
			path.lineTo(0, height);
			path.lineTo(0, rounded / 2);
			path.arcTo(rounded / 2, rounded / 2, 0, 0, 1, rounded / 2, 0);
			path.closePath();
			header = path;
		}
		ug.apply(new UStroke()).apply(backColor).apply(backColor.bg()).draw(header);

	}
}
/* ========================================================================
 * 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.svek;

import net.sourceforge.plantuml.graphic.UDrawable;
import net.sourceforge.plantuml.ugraphic.UGraphic;
import net.sourceforge.plantuml.ugraphic.UPath;
import net.sourceforge.plantuml.ugraphic.URectangle;
import net.sourceforge.plantuml.ugraphic.UShape;
import net.sourceforge.plantuml.ugraphic.UStroke;
import net.sourceforge.plantuml.ugraphic.color.HColor;
import net.sourceforge.plantuml.ugraphic.color.HColorUtils;

public final class RoundedSouth implements UDrawable {

	private final double width;
	private final double height;
	private final HColor backColor;
	private final double rounded;

	public RoundedSouth(double width, double height, HColor backColor, double rounded) {
		if (width == 0)
			throw new IllegalArgumentException();
		if (height == 0)
			throw new IllegalArgumentException();

		this.width = width;
		this.height = height;
		this.rounded = rounded;
		this.backColor = backColor;
	}

	public void drawU(UGraphic ug) {
		if (HColorUtils.isTransparent(backColor))
			return;

		final UShape header;
		if (rounded == 0) {
			header = new URectangle(width, height);
		} else {
			final UPath path = new UPath();
			path.moveTo(0, 0);
			path.lineTo(width, 0);
			path.lineTo(width, height - rounded / 2);
			path.arcTo(rounded / 2, rounded / 2, 0, 0, 1, width - rounded / 2, height);
			path.lineTo(rounded / 2, height);
			path.arcTo(rounded / 2, rounded / 2, 0, 0, 1, 0, height - rounded / 2);
			path.lineTo(0, 0);
			path.closePath();
			header = path;
		}
		ug.apply(new UStroke()).apply(backColor).apply(backColor.bg()).draw(header);

	}
}
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.style.StyleSignature;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.style.StyleSignature;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.style.StyleSignature;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.style.StyleSignature;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
			final String svgHeader;
			if (image.containsXlink())
				svgHeader = "<svg height=\"" + (int) (image.getHeight() * scale) + "\" width=\""
						+ (int) (image.getWidth() * scale)
						+ "\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns=\"http://www.w3.org/2000/svg\" >";
			else
				svgHeader = "<svg height=\"" + (int) (image.getHeight() * scale) + "\" width=\""
						+ (int) (image.getWidth() * scale) + "\" xmlns=\"http://www.w3.org/2000/svg\" >";
		if (states.length == 0)

		if (colors == null || colors.getColor(ColorType.BACK) == null)

		if (colors == null || colors.getColor(ColorType.LINE) == null)

	private UStroke getStroke(Style style) {
		return style.getStroke();
	}

				.withStroke(getStroke(style));
import net.sourceforge.plantuml.cucadiagram.Stereotype;
import net.sourceforge.plantuml.style.StyleSignature;
	protected final Stereotype stereotype;
	public Player(String title, ISkinParam skinParam, TimingRuler ruler, boolean compact, Stereotype stereotype) {
		this.stereotype = stereotype;
	protected abstract StyleSignature getStyleSignature();
		return FontConfiguration.create(skinParam, StyleSignatureBasic
				.of(SName.root, SName.element, SName.timingDiagram).getMergedStyle(skinParam.getCurrentStyleBuilder()));
import net.sourceforge.plantuml.awt.geom.Dimension2D;
		super(code, skinParam, ruler, compact, null);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.cucadiagram.Stereotype;
import net.sourceforge.plantuml.style.StyleSignature;
	public PlayerBinary(String code, ISkinParam skinParam, TimingRuler ruler, boolean compact, Stereotype stereotype) {
		super(code, skinParam, ruler, compact, stereotype);
	protected StyleSignature getStyleSignature() {
		return StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram, SName.binary).withTOBECHANGED(stereotype);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
		super(title, skinParam, ruler, compact, null);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.cucadiagram.Stereotype;
import net.sourceforge.plantuml.style.StyleSignature;
	public PlayerRobustConcise(TimingStyle type, String full, ISkinParam skinParam, TimingRuler ruler, boolean compact,
			Stereotype stereotype) {
		super(full, skinParam, ruler, compact, stereotype);
	protected StyleSignature getStyleSignature() {
			return StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram, SName.concise).withTOBECHANGED(stereotype);
			return StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram, SName.robust).withTOBECHANGED(stereotype);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.cucadiagram.Stereotype;
	public CommandExecutionResult createRobustConcise(String code, String full, TimingStyle type, boolean compact,
			Stereotype stereotype) {
		final Player player = new PlayerRobustConcise(type, full, getSkinParam(), ruler, compactByDefault || compact,
				stereotype);
	public CommandExecutionResult createBinary(String code, String full, boolean compact, Stereotype stereotype) {
		final Player player = new PlayerBinary(full, getSkinParam(), ruler, compactByDefault, stereotype);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.cucadiagram.Stereotype;
				RegexLeaf.spaceZeroOrMore(), //
				new RegexLeaf("STEREOTYPE", "(\\<\\<.*\\>\\>)?"), //
				new RegexLeaf("CODE", "([%pLN_.@]+)"), //
				RegexLeaf.spaceZeroOrMore(), //
				new RegexLeaf("STEREOTYPE2", "(\\<\\<.*\\>\\>)?"), //
				RegexLeaf.spaceZeroOrMore(), //
				RegexLeaf.end());

		Stereotype stereotype = null;
		if (arg.get("STEREOTYPE", 0) != null)
			stereotype = Stereotype.build(arg.get("STEREOTYPE", 0));
		else if (arg.get("STEREOTYPE2", 0) != null)
			stereotype = Stereotype.build(arg.get("STEREOTYPE2", 0));

		return diagram.createBinary(code, full, compact != null, stereotype);
import net.sourceforge.plantuml.cucadiagram.Stereotype;
								new RegexLeaf("STEREOTYPE", "(\\<\\<.*\\>\\>)?"), //
								RegexLeaf.spaceZeroOrMore(), //
				RegexLeaf.spaceZeroOrMore(), //
				new RegexLeaf("STEREOTYPE2", "(\\<\\<.*\\>\\>)?"), //
				RegexLeaf.spaceZeroOrMore(), //
		if (full == null)

		Stereotype stereotype = null;
		if (arg.get("STEREOTYPE", 0) != null)
			stereotype = Stereotype.build(arg.get("STEREOTYPE", 0));
		else if (arg.get("STEREOTYPE2", 0) != null)
			stereotype = Stereotype.build(arg.get("STEREOTYPE2", 0));

		return diagram.createRobustConcise(code, full, type, compact != null, stereotype);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
	public boolean containsXlink() {
		return svg.contains("xmlns:xlink=\"http://www.w3.org/1999/xlink\"");
	}

		if (color instanceof HColorGradient)

		if (color == null)

		if (back == TRANSPARENT)

		if (back instanceof HColorBackground && ((HColorBackground) back).getBack() == TRANSPARENT)

		if (back instanceof HColorSimple && ((HColorSimple) back).isTransparent())

		if (completion == 0)

		if (completion == 100)

		if (color1 instanceof HColorSimple && color2 instanceof HColorSimple)

				for (USegment seg2 : jiggle.toUPath())
					if (seg2.getSegmentType() == USegmentType.SEG_LINETO)

				last = new Point2D.Double(x, y);
			} else if (type == USegmentType.SEG_ARCTO) {
				final double x = segment.getCoord()[5];
				final double y = segment.getCoord()[6];
				result.lineTo(x, y);
		return 1202205;
		final int beta = 0;
		return 1651316152000L;
;
;
;
archimate
azure
c4
classy
classy-c4
domainstory
elastic
kubernetes
logos
tupadr3