From f1d83b484c96014ffb537000687b5515dc0e679d Mon Sep 17 00:00:00 2001 From: Arnaud Roques Date: Sat, 1 May 2021 19:40:56 +0200 Subject: [PATCH] Integration of themes from Brett Schwarz --- build.xml | 5 + pom.xml | 3 +- .../plantuml/dedication/Dedication.java | 2 +- .../dedication/DedicationCrypted.java | 25 +- .../plantuml/dedication/DedicationSimple.java | 4 +- .../plantuml/dedication/Dedications.java | 8 +- .../dedication/TinyHashableString.java | 61 +++ .../plantuml/donors/PSystemDonors.java | 42 +- .../plantuml/elk/CucaDiagramFileMakerElk.java | 3 + .../plantuml/elk/proxy/ElkObjectProxy.java | 7 + .../plantuml/elk/proxy/EnumProxy.java | 7 - .../plantuml/elk/proxy/Reflect.java | 11 + .../elk/proxy/core/math/ElkPadding.java | 19 + .../elk/proxy/core/options/CoreOptions.java | 1 + .../core/options/EdgeLabelPlacement.java | 4 +- .../core/options/NodeLabelPlacement.java | 4 +- .../proxy/core/options/SizeConstraint.java | 4 +- .../elk/proxy/graph/ElkWithProperty.java | 8 +- .../plantuml/preproc2/PreprocessorUtils.java | 11 + .../plantuml/project/GanttArrow.java | 1 - .../plantuml/project/GanttDiagram.java | 45 +- .../plantuml/project/GanttDiagramFactory.java | 2 + .../plantuml/project/LabelStrategy.java | 42 ++ .../command/CommandLabelOnFirstColumn.java} | 39 +- .../project/draw/AbstractTaskDraw.java | 10 + .../plantuml/project/draw/TaskDraw.java | 6 +- .../project/draw/TaskDrawDiamond.java | 31 +- .../project/draw/TaskDrawRegular.java | 17 +- .../project/draw/TaskDrawSeparator.java | 12 +- .../plantuml/project/lang/ComplementDate.java | 2 +- .../project/lang/SentenceHappensDate.java | 8 +- .../project/lang/SentencePausesDate.java | 8 +- .../project/lang/SentencePausesDates.java | 8 +- .../lang/SentenceTaskEndsAbsolute.java | 8 +- .../lang/SentenceTaskStartsAbsolute.java | 8 +- .../sourceforge/plantuml/tim/EaterTheme.java | 60 +++ .../sourceforge/plantuml/tim/TContext.java | 57 ++- .../sourceforge/plantuml/tim/TLineType.java | 6 +- .../sourceforge/plantuml/version/License.java | 1 + .../sourceforge/plantuml/version/Version.java | 2 +- ...andWBSOrgmode.java => CommandWBSItem.java} | 20 +- .../plantuml/wbs/CommandWBSTabulation.java | 79 --- .../sourceforge/plantuml/wbs/WBSDiagram.java | 26 +- .../plantuml/wbs/WBSDiagramFactory.java | 6 +- themes/puml-theme-black-knight.puml | 453 +++++++++++++++++ themes/puml-theme-bluegray.puml | 434 ++++++++++++++++ themes/puml-theme-cerulean-outline.puml | 467 +++++++++++++++++ themes/puml-theme-cerulean.puml | 442 ++++++++++++++++ themes/puml-theme-cyborg-outline.puml | 446 ++++++++++++++++ themes/puml-theme-cyborg.puml | 452 +++++++++++++++++ themes/puml-theme-hacker.puml | 479 ++++++++++++++++++ themes/puml-theme-hacker.puml-hold | 36 ++ themes/puml-theme-lightgray.puml | 423 ++++++++++++++++ themes/puml-theme-materia-outline.puml | 478 +++++++++++++++++ themes/puml-theme-materia.puml | 437 ++++++++++++++++ themes/puml-theme-metal.puml | 443 ++++++++++++++++ themes/puml-theme-minty.puml | 440 ++++++++++++++++ themes/puml-theme-resume-light.puml | 48 ++ themes/puml-theme-sandstone.puml | 441 ++++++++++++++++ themes/puml-theme-silver.puml | 452 +++++++++++++++++ themes/puml-theme-sketchy-outline.puml | 441 ++++++++++++++++ themes/puml-theme-sketchy.puml | 443 ++++++++++++++++ themes/puml-theme-spacelab.puml | 441 ++++++++++++++++ themes/puml-theme-superhero-outline.puml | 446 ++++++++++++++++ themes/puml-theme-superhero.puml | 440 ++++++++++++++++ themes/puml-theme-united.puml | 441 ++++++++++++++++ 66 files changed, 9517 insertions(+), 239 deletions(-) create mode 100644 src/net/sourceforge/plantuml/dedication/TinyHashableString.java create mode 100644 src/net/sourceforge/plantuml/elk/proxy/ElkObjectProxy.java delete mode 100644 src/net/sourceforge/plantuml/elk/proxy/EnumProxy.java create mode 100644 src/net/sourceforge/plantuml/elk/proxy/core/math/ElkPadding.java create mode 100644 src/net/sourceforge/plantuml/project/LabelStrategy.java rename src/net/sourceforge/plantuml/{wbs/CommandWBSPlus.java => project/command/CommandLabelOnFirstColumn.java} (56%) create mode 100644 src/net/sourceforge/plantuml/tim/EaterTheme.java rename src/net/sourceforge/plantuml/wbs/{CommandWBSOrgmode.java => CommandWBSItem.java} (83%) delete mode 100644 src/net/sourceforge/plantuml/wbs/CommandWBSTabulation.java create mode 100644 themes/puml-theme-black-knight.puml create mode 100644 themes/puml-theme-bluegray.puml create mode 100644 themes/puml-theme-cerulean-outline.puml create mode 100644 themes/puml-theme-cerulean.puml create mode 100644 themes/puml-theme-cyborg-outline.puml create mode 100644 themes/puml-theme-cyborg.puml create mode 100644 themes/puml-theme-hacker.puml create mode 100644 themes/puml-theme-hacker.puml-hold create mode 100644 themes/puml-theme-lightgray.puml create mode 100644 themes/puml-theme-materia-outline.puml create mode 100644 themes/puml-theme-materia.puml create mode 100644 themes/puml-theme-metal.puml create mode 100644 themes/puml-theme-minty.puml create mode 100644 themes/puml-theme-resume-light.puml create mode 100644 themes/puml-theme-sandstone.puml create mode 100644 themes/puml-theme-silver.puml create mode 100644 themes/puml-theme-sketchy-outline.puml create mode 100644 themes/puml-theme-sketchy.puml create mode 100644 themes/puml-theme-spacelab.puml create mode 100644 themes/puml-theme-superhero-outline.puml create mode 100644 themes/puml-theme-superhero.puml create mode 100644 themes/puml-theme-united.puml diff --git a/build.xml b/build.xml index 634b27de3..f8692e3b8 100644 --- a/build.xml +++ b/build.xml @@ -76,6 +76,11 @@ + + + + + diff --git a/pom.xml b/pom.xml index a1b463032..d89be7687 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ net.sourceforge.plantuml plantuml - 1.2021.6-SNAPSHOT + 1.2021.5-SNAPSHOT jar PlantUML @@ -145,6 +145,7 @@ stdlib/**/*.repx skin/**/*.skin + themes/**/*.puml svg/**/*.css svg/**/*.js diff --git a/src/net/sourceforge/plantuml/dedication/Dedication.java b/src/net/sourceforge/plantuml/dedication/Dedication.java index a8686c273..5257eb414 100644 --- a/src/net/sourceforge/plantuml/dedication/Dedication.java +++ b/src/net/sourceforge/plantuml/dedication/Dedication.java @@ -46,6 +46,6 @@ public interface Dedication { static public final BigInteger N = new BigInteger( "64194259632025692228025828504368542164501926620236990850309916606915924860847417702229807236946186163298479808527077315212362810246237044147835839820235668271044023359607622658694578433933680627840319408427732468918341837133798296090069295727323673222224923200718714534955390633175683720810506099934813509605263799234445827953809462431871169282281822048299576307847441008670575692934434087522877910989584374673170522742162366773143807761599862833698229067475807108264396251702152180676841544743258182370105404479387062985271422237607462447989728490398294623785717593446941673706569352249533885603771123718557406286501161336667835919957553680522213067630956498293529840163155604109185561515875171125161872265975088797712442352939352686113608345330266855433849127812528823634773975825170679786399199082599910532761710473383280738663105826045325480095451410448217715495894688594898541182351588505292424154550388343455540760277051977859647543838445735549451966254020972172982014944475678385523833120793348365125754234511467512831686599126674298367512469557219326026525667529348508876650236597163509336304607610284488623800062157659286940214435134423619711736992281071131245654755167288438258292694799131521268600284444731890784171372171309"); - public BufferedImage getImage(String sentence); + public BufferedImage getImage(TinyHashableString sentence); } diff --git a/src/net/sourceforge/plantuml/dedication/DedicationCrypted.java b/src/net/sourceforge/plantuml/dedication/DedicationCrypted.java index 9681d410e..0d81585ab 100644 --- a/src/net/sourceforge/plantuml/dedication/DedicationCrypted.java +++ b/src/net/sourceforge/plantuml/dedication/DedicationCrypted.java @@ -58,27 +58,28 @@ public class DedicationCrypted implements Dedication { this.tinyHash = tinyHash; } - public synchronized BufferedImage getImage(final String sentence) { - if (sentence.length() < 40) { + public synchronized BufferedImage getImage(final TinyHashableString sentence) { + final String line = sentence.getSentence(); + + if (line.length() < 40) { return null; } try { - if (solution == null || sentence.equals(this.solution) == false) { + if (solution == null || line.equals(this.solution) == false) { if (System.currentTimeMillis() < next) { return null; } - final int tinyHash = Noise.shortHash(sentence.getBytes("UTF-8"), N.toByteArray()); - if (this.tinyHash != tinyHash) { + if (this.tinyHash != sentence.tinyHash()) { return null; } this.next = System.currentTimeMillis() + 5000L; } - final byte[] hash1 = Noise.computeArgon2bytes(sentence.getBytes("UTF-8"), - (pq.toString(35) + sentence).getBytes("UTF-8")); - final byte[] hash2 = Noise.computeArgon2bytes(sentence.getBytes("UTF-8"), - (pq.toString(36) + sentence).getBytes("UTF-8")); + final byte[] hash1 = Noise.computeArgon2bytes(line.getBytes("UTF-8"), + (pq.toString(35) + line).getBytes("UTF-8")); + final byte[] hash2 = Noise.computeArgon2bytes(line.getBytes("UTF-8"), + (pq.toString(36) + line).getBytes("UTF-8")); final BlumBlumShub rndBBS = new BlumBlumShub(pq, hash1); final MTRandom rndMT = new MTRandom(hash2); @@ -86,7 +87,7 @@ public class DedicationCrypted implements Dedication { byte[] current = crypted.clone(); Noise.shuffle(current, rndMT); Noise.xor(current, rndBBS); - Noise.xor(current, sentence.getBytes("UTF-8")); + Noise.xor(current, line.getBytes("UTF-8")); Noise.shuffle(current, rndMT); @@ -98,7 +99,7 @@ public class DedicationCrypted implements Dedication { Noise.shuffle(current, rndMT); Noise.xor(current, rndBBS); - final String argon = Noise.computeArgon2String(current, (pq.toString(34) + sentence).getBytes("UTF-8")); + final String argon = Noise.computeArgon2String(current, (pq.toString(34) + line).getBytes("UTF-8")); if (this.argon2.equals(argon) == false) { return null; @@ -107,7 +108,7 @@ public class DedicationCrypted implements Dedication { current = Noise.reverse(current, rndMT.nextInt()); final BufferedImage img = PSystemDedication.getBufferedImage(new ByteArrayInputStream(current)); - this.solution = sentence; + this.solution = line; return img; } catch (Throwable t) { t.printStackTrace(); diff --git a/src/net/sourceforge/plantuml/dedication/DedicationSimple.java b/src/net/sourceforge/plantuml/dedication/DedicationSimple.java index 3b0056d03..6af3fdead 100644 --- a/src/net/sourceforge/plantuml/dedication/DedicationSimple.java +++ b/src/net/sourceforge/plantuml/dedication/DedicationSimple.java @@ -48,8 +48,8 @@ public class DedicationSimple implements Dedication { this.sentence = sentence; } - public synchronized BufferedImage getImage(String sentence) { - if (same(this.sentence, sentence) == false) { + public synchronized BufferedImage getImage(TinyHashableString sentence) { + if (same(this.sentence, sentence.getSentence()) == false) { return null; } diff --git a/src/net/sourceforge/plantuml/dedication/Dedications.java b/src/net/sourceforge/plantuml/dedication/Dedications.java index d44ecffa9..2587fb543 100644 --- a/src/net/sourceforge/plantuml/dedication/Dedications.java +++ b/src/net/sourceforge/plantuml/dedication/Dedications.java @@ -50,7 +50,6 @@ public class Dedications { private static final List all = new ArrayList(); static { - try { all.add(new DedicationSimple(load("dedication"), "Write your own dedication!")); all.add(new DedicationSimple(load("linux_china"), "linux_china")); @@ -62,8 +61,8 @@ public class Dedications { "1182423723677118831606503500858825217076578422970565964857326298418401529955036896808663335300684244453386039908536275400945824932191521017102701344437753036730900076162922741167523337650578479960119614237031234925702200473053235777"))); all.add(secret(3, "514816d583044efbd336882227deb822194ff63e3bdc3cf707a01f17770d5a6a", new BigInteger( "538955952645999836068094511687012232127213955837942782605199622268460518023083462090291844640318324475656060087513198129259364840841077651829017347845508167869708224054456044836844382437974410757740941102771969965334031780041648873"))); - } catch (IOException e) { - e.printStackTrace(); + } catch (Throwable t) { + t.printStackTrace(); } } @@ -82,8 +81,9 @@ public class Dedications { } public synchronized static BufferedImage get(String line) { + final TinyHashableString sentence = new TinyHashableString(line); for (Dedication dedication : all) { - final BufferedImage image = dedication.getImage(line); + final BufferedImage image = dedication.getImage(sentence); if (image != null) { return image; } diff --git a/src/net/sourceforge/plantuml/dedication/TinyHashableString.java b/src/net/sourceforge/plantuml/dedication/TinyHashableString.java new file mode 100644 index 000000000..f05453569 --- /dev/null +++ b/src/net/sourceforge/plantuml/dedication/TinyHashableString.java @@ -0,0 +1,61 @@ +/* ======================================================================== + * PlantUML : a free UML diagram generator + * ======================================================================== + * + * (C) Copyright 2009-2020, Arnaud Roques + * + * Project Info: http://plantuml.com + * + * If you like this project or if you find it useful, you can support us at: + * + * http://plantuml.com/patreon (only 1$ per month!) + * http://plantuml.com/paypal + * + * This file is part of PlantUML. + * + * PlantUML is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * PlantUML distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + * License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + * USA. + * + * + * Original Author: Arnaud Roques + * + * + */ +package net.sourceforge.plantuml.dedication; + +import java.io.UnsupportedEncodingException; + +public final class TinyHashableString { + + private final String sentence; + private int cachedTinyHash = -1; + + public TinyHashableString(String sentence) { + this.sentence = sentence; + } + + public final String getSentence() { + return sentence; + } + + public final synchronized int tinyHash() throws UnsupportedEncodingException { + if (cachedTinyHash == -1) { + cachedTinyHash = Noise.shortHash(sentence.getBytes("UTF-8"), Dedication.N.toByteArray()); + } + return cachedTinyHash; + + } + +} diff --git a/src/net/sourceforge/plantuml/donors/PSystemDonors.java b/src/net/sourceforge/plantuml/donors/PSystemDonors.java index f53563038..68b0fe729 100644 --- a/src/net/sourceforge/plantuml/donors/PSystemDonors.java +++ b/src/net/sourceforge/plantuml/donors/PSystemDonors.java @@ -69,28 +69,28 @@ public class PSystemDonors extends PlainDiagram { private static final int COLS = 6; private static final int FREE_LINES = 6; - public static final String DONORS = "6sWD0AmFkBap0wp4H6CjU-RENbb-8cPf4i7oFA4uiOZJNK3y0UwT7lSRwI-YAxltJJEYrckJSaPHV13q" + public static final String DONORS = "6vOD0AmFkBap0wp4H6CjU-RENbb-8cPf4i7oFA4uiOZJNK3y0UwT7lSRwI-YAxltJJEYrckJSaPHV13q" + "W7UtXVQXzBy-27EYV0Z-tGWU80D4ITH6jIptfDXjcof3Il3lEr_v9UWTth51eZbAgyMHwq-_8GFlEsFp" - + "x3GsNZsQe2y2FmRsrVzTJelBGo7Cqcm5Hc3KQOHRtMF_7mLLrwXs9rN3JZ-cKxagXgkYAh7PzgQ8LjBS" - + "CIlKjVDHeyb5CMafKjoja8RRw4neoCdi4sI31eqVweVmPdE5fOmpWJZQ4A7hwxqT-quilr3YWyWHOe7X" - + "WJcGSbWMKUBSKD1m262ecqKrjgHopnCZAFpGGjxyeP5KF5BEd0uN3QS7GE3s32gGz44Dcd1sw6v0nP5i" - + "qM69gwwC6qlpTLYUoXv9myt4mic2La0DGVu7NU3fiSP7KsVR38wadYPvdROIzMVYxRJD1NsZQvE4zRMr" - + "QQQFAqLP8jMrZS_HNlC8mDrIAw_uCkQ8vm3DVlEg8giVBP0VWUwh2LloPzdlB2GXh6tO1-ewLnyULOHZ" - + "CcIQMCVlPjjhsIzq1IORaB02BEdlXgyhJN2mXQvS7W6Uq2gcMUS3XRIqUh_eyMNjFk6QOebxuwBtCS9I" - + "-kzNVPWPYWDqeCmiw9e5Yt8rhTgBBOXWZz2f0JU5P2ESLzVbkFguI1_v2O2ta16GmuRG2F7yaahNKGZL" - + "aQbhqbm0p9zMsgBXieH1kNP1DwDAB5HMgprELsVwiZ5td_J1yrQ3COfZEgcniDozAjB3i5WrchDtQqTf" - + "Ji4p-JZEgzvpC5S1hYsyHtnmppyo46TwPI1ISiXZtuT_PEbMOJ6BDjVDgdHNzOE3Xsu-S3UBPZ6ZJ1wo" - + "B1WSJqHB_KhafoN3tq78PlbhTR5Fi3bTfuO8CxBWzjBacfeSqt2OpdAix2A4HorUSIeeN4ImbwKbsSAc" - + "K7d6wb58oE-OJo9IMHPA0zQMkmBFf7iKvE6y1rOjgrjJIIwWYcmcY4aBLhLKSQIl1J9mhQ9dfdLY-zC2" - + "2-hI7cFY38VYAoRQgjoGWIamCqJuXK4afW-afVIIaqG4_kVFNUgbrphuyPqnV38EaZqa4L15ndJgYMgc" - + "xdOC6yPwYRzVB-Nc8_ZphptQvDHez_mCGRGE4W8mmWkubFk54JmD_7Ksz08EiKA8DXAkNBNqB92mO3FU" - + "kObwS9jHlOd9ScDoqIloGnN_DfMeS38swBY8fJXQBAdIoyrgK0Ljt_okmqqEYh-BAaCYkUpDpcGaR1Ig" - + "E3V7RcqOch4P0tXG7RK9jDtrsscMLuqvNv5K6Pu6vDiDEPNg4LfOKzFoiH1OBSRjlQNzbDFZFnde5zGw" - + "-zYhXuQ3N5tVRgBXMnUadp6I62vITaJGMsfEBF3mJGHvKIsKZgLjC-pimGhv3RoC5n8EsS47abfUfQno" - + "GmxTGlQEQfIVAAA6i40kB5ReAcAXbEE154d1dDKoaI7be2_OrnE0KnGSx-yj29UTQ7v6i_RsZ48obsxk" - + "9XL4DfoVHMAJagqUER2VbhbiyuhSZbgamuvzExxZVFiZwkQB2382CIq9NgiBVNTZbraQDjEUwpGuZilS" - + "F9Zy0dP5EqyPs1ecMv2bR0OgdWGWTiYWmenNyglvY6lE1VBl_KOf33JXUU8qkl5S2rQHhJOY9GrekSaI" - + "klRzZfkS72YSM6nmOOcvqSC4YawlKsq_QRCiWqeKBXLVsCEiPbEgV6JOGNFPQkVLzWG0"; + + "x3GsNZsQe2y2FmRsrR-VEbkNgqAOfRiL685HqGYNCPbxlHVLei9NiFDHmqu_fbCfgiEXMfNOR7jJH2jf" + + "xfWLwjlvgDNaeXWfHKgW5T8869q9ZJcPVP9iqA3nI_qGtcoki9Hn9X176o9qVRstSz-9vHT9V33oXbXW" + + "hC0SI3ao5b7qt53Gy0fWg9z5DRQqSi-JL53aG0jvyuz6Kl58ENCwN3Hy7W11m3EeGD87DMh2sSBTW4eY" + + "sQBJ4bUT7JUMbkkmFAMFfE7fnCB7WbP03K6IWoxmz5ZZewcpRGP7Ka-Jl4vRXVepunsqpGLzOskJXFMr" + + "lMdcZ2j1MIBLjOtFqLxp2C3TKYkl-3BcYEO0pNxpgYAh7osG7u4UgWbRycVPxonaGrZRi0_KTQuvFAe8" + + "9sJ8DB5Etissr_GNkhZ91YMi08lydl9rjWaEjj3LaaU09xHAQDRvH24jhTulUdnPkq-ufaJYtgZeVOom" + + "bFxxLHzcXk807Imp2xhfWcLmDQqwYYs8O8_GYG4tXMGZd5VNvRZwk4WV-Gc0DvKHaCE6eGdY-MKhNKSX" + + "L4Ucharp0R3rjD8M3Ryb32gq2xeLLIAXibhjSRewqvUDBVT97pnlDnYZEAQpDHQMkrT5UXYMg4Qplbix" + + "H7CAhl9nabUzPpvN0Qujl4TzSCy_Cg1dUcKWKdp8Oz-7VsJfLc4nItYkcrNfhke71m_TSk1k5irXHfay" + + "P1eCZYQYfNubyjEIuMyUifg_rXJx15lJTMQ8C2C9RYzDRgZ9CGslwIp7nIv2PAh5AqxnmWK5UrdX95lO" + + "52hFM3qE2VcTy4b4geo5qeYrvQx2Cx97GHxEUsJLiherbUG2gincWeYqO5LB5KVwMY03rofwPbidjZyj" + + "i60kxJ4cLXoAhvXektA3WYamCuJoXK4aAWEDKdhPaqG4_kVFNUh9jGxh-CuOFXa7oHwI2AX2cSuyKStK" + + "quvXmrYlyVVhfTny17_-jKURd9hidfyXYDP1L016U06NSdymWgU1lyw6MO13hA2YZOGhromz2IGis89t" + + "RgBERpEQDp5PRbmkUaL-g9BVvdQuc0wnGST59CNHOacLNcvMWugtVSkx3ZSv3FnTL1aMoMMldib8o2XK" + + "SMwFtTemD6EL0LPG7RK9mhlhjzCihnfplWAfCbm1yjs6d4hr22sigMd5M0Yi4UFsthRzbDFZFndenskj" + + "7tlrq7YGg-lVJJHyEuBfvumaXelO7H76BJKd4dZu9eYyg1PAnzAE6NQUO8Ny1b_62mb7xE03crfUfQno" + + "GuwnXUoTrIW_8KGD8O5SMApKLSH2ASS3APA2EQjbD4FAGLzmTay0Jb5mlB-t8PoUQ7v1i_RsZ48obsFk" + + "9HL4CfoVHMAJagq1ER0lPIxRkYAtinRfi1FVZkyut_c8klKY0YKGfIHuRIxqtOtzPcdOb9xhDJYEoxmy" + + "cFn2TaKxNndO6YTRaELi1YgU121sKAXGUML-jHznpJb5_htVA8M19ZnFdKOtdkl0Ah8rHgIa0IqtMOHh" + + "t--voSc1med41XUMcXizJABez3hLZfCswycW4eLBnMJtCAlPb2eV6NRGN3PDdVO4YoM1LTrvjQ8J"; /* * Special thanks to our sponsors and donors: diff --git a/src/net/sourceforge/plantuml/elk/CucaDiagramFileMakerElk.java b/src/net/sourceforge/plantuml/elk/CucaDiagramFileMakerElk.java index 5ad393890..ee880fb6d 100644 --- a/src/net/sourceforge/plantuml/elk/CucaDiagramFileMakerElk.java +++ b/src/net/sourceforge/plantuml/elk/CucaDiagramFileMakerElk.java @@ -79,6 +79,7 @@ import net.sourceforge.plantuml.cucadiagram.entity.EntityFactory; /* import org.eclipse.elk.core.RecursiveGraphLayoutEngine; +import org.eclipse.elk.core.math.ElkPadding; import org.eclipse.elk.core.options.CoreOptions; import org.eclipse.elk.core.options.Direction; import org.eclipse.elk.core.options.EdgeLabelPlacement; @@ -92,6 +93,7 @@ import org.eclipse.elk.graph.util.ElkGraphUtil; */ import net.sourceforge.plantuml.elk.proxy.core.RecursiveGraphLayoutEngine; +import net.sourceforge.plantuml.elk.proxy.core.math.ElkPadding; import net.sourceforge.plantuml.elk.proxy.core.options.CoreOptions; import net.sourceforge.plantuml.elk.proxy.core.options.Direction; import net.sourceforge.plantuml.elk.proxy.core.options.EdgeLabelPlacement; @@ -406,6 +408,7 @@ public class CucaDiagramFileMakerElk implements CucaDiagramFileMaker { // We create the "cluster" in ELK for this group final ElkNode elkCluster = ElkGraphUtil.createNode(cluster); elkCluster.setProperty(CoreOptions.DIRECTION, Direction.DOWN); + elkCluster.setProperty(CoreOptions.PADDING, new ElkPadding(40, 15, 15, 15)); // Not sure this is usefull to put a label on a "cluster" final ElkLabel label = ElkGraphUtil.createLabel(elkCluster); diff --git a/src/net/sourceforge/plantuml/elk/proxy/ElkObjectProxy.java b/src/net/sourceforge/plantuml/elk/proxy/ElkObjectProxy.java new file mode 100644 index 000000000..c91da684f --- /dev/null +++ b/src/net/sourceforge/plantuml/elk/proxy/ElkObjectProxy.java @@ -0,0 +1,7 @@ +package net.sourceforge.plantuml.elk.proxy; + +public interface ElkObjectProxy { + + public Object getTrueObject(); + +} diff --git a/src/net/sourceforge/plantuml/elk/proxy/EnumProxy.java b/src/net/sourceforge/plantuml/elk/proxy/EnumProxy.java deleted file mode 100644 index fccda5454..000000000 --- a/src/net/sourceforge/plantuml/elk/proxy/EnumProxy.java +++ /dev/null @@ -1,7 +0,0 @@ -package net.sourceforge.plantuml.elk.proxy; - -public interface EnumProxy { - - public Enum getTrueObject(); - -} diff --git a/src/net/sourceforge/plantuml/elk/proxy/Reflect.java b/src/net/sourceforge/plantuml/elk/proxy/Reflect.java index a47754a60..62a41833c 100644 --- a/src/net/sourceforge/plantuml/elk/proxy/Reflect.java +++ b/src/net/sourceforge/plantuml/elk/proxy/Reflect.java @@ -100,6 +100,17 @@ public class Reflect { } } + public static Object newInstance(String className, double arg1, double arg2, double arg3, double arg4) { + try { + final Class cl = Class.forName(className); + final Constructor m = cl.getConstructor(Double.TYPE, Double.TYPE, Double.TYPE, Double.TYPE); + return m.newInstance(arg1, arg2, arg3, arg4); + } catch (Throwable t) { + t.printStackTrace(); + throw new IllegalArgumentException(t); + } + } + public static Object field(String className, String fieldName) { try { final Class cl = Class.forName(className); diff --git a/src/net/sourceforge/plantuml/elk/proxy/core/math/ElkPadding.java b/src/net/sourceforge/plantuml/elk/proxy/core/math/ElkPadding.java new file mode 100644 index 000000000..f73022ce7 --- /dev/null +++ b/src/net/sourceforge/plantuml/elk/proxy/core/math/ElkPadding.java @@ -0,0 +1,19 @@ +package net.sourceforge.plantuml.elk.proxy.core.math; + +import net.sourceforge.plantuml.elk.proxy.ElkObjectProxy; +import net.sourceforge.plantuml.elk.proxy.Reflect; + +public class ElkPadding implements ElkObjectProxy { + + public final Object obj; + + public ElkPadding(double top, double right, double bottom, double left) { + this.obj = Reflect.newInstance("org.eclipse.elk.core.math.ElkPadding", top, right, bottom, left); + } + + @Override + public Object getTrueObject() { + return obj; + } + +} diff --git a/src/net/sourceforge/plantuml/elk/proxy/core/options/CoreOptions.java b/src/net/sourceforge/plantuml/elk/proxy/core/options/CoreOptions.java index f830fe15a..59c8a1503 100644 --- a/src/net/sourceforge/plantuml/elk/proxy/core/options/CoreOptions.java +++ b/src/net/sourceforge/plantuml/elk/proxy/core/options/CoreOptions.java @@ -12,5 +12,6 @@ public class CoreOptions { public static final Object EDGE_TYPE = Reflect.field("org.eclipse.elk.core.options.CoreOptions", "EDGE_TYPE"); public static final Object NODE_LABELS_PLACEMENT = Reflect.field("org.eclipse.elk.core.options.CoreOptions", "NODE_LABELS_PLACEMENT"); public static final Object NODE_SIZE_OPTIONS = Reflect.field("org.eclipse.elk.core.options.CoreOptions", "NODE_SIZE_OPTIONS"); + public static final Object PADDING = Reflect.field("org.eclipse.elk.core.options.CoreOptions", "PADDING"); } diff --git a/src/net/sourceforge/plantuml/elk/proxy/core/options/EdgeLabelPlacement.java b/src/net/sourceforge/plantuml/elk/proxy/core/options/EdgeLabelPlacement.java index fced3ac14..e04f6399d 100644 --- a/src/net/sourceforge/plantuml/elk/proxy/core/options/EdgeLabelPlacement.java +++ b/src/net/sourceforge/plantuml/elk/proxy/core/options/EdgeLabelPlacement.java @@ -1,9 +1,9 @@ package net.sourceforge.plantuml.elk.proxy.core.options; -import net.sourceforge.plantuml.elk.proxy.EnumProxy; +import net.sourceforge.plantuml.elk.proxy.ElkObjectProxy; import net.sourceforge.plantuml.elk.proxy.Reflect; -public enum EdgeLabelPlacement implements EnumProxy { +public enum EdgeLabelPlacement implements ElkObjectProxy { TAIL, HEAD; diff --git a/src/net/sourceforge/plantuml/elk/proxy/core/options/NodeLabelPlacement.java b/src/net/sourceforge/plantuml/elk/proxy/core/options/NodeLabelPlacement.java index 9691162e8..5147fd656 100644 --- a/src/net/sourceforge/plantuml/elk/proxy/core/options/NodeLabelPlacement.java +++ b/src/net/sourceforge/plantuml/elk/proxy/core/options/NodeLabelPlacement.java @@ -1,9 +1,9 @@ package net.sourceforge.plantuml.elk.proxy.core.options; -import net.sourceforge.plantuml.elk.proxy.EnumProxy; +import net.sourceforge.plantuml.elk.proxy.ElkObjectProxy; import net.sourceforge.plantuml.elk.proxy.Reflect; -public enum NodeLabelPlacement implements EnumProxy { +public enum NodeLabelPlacement implements ElkObjectProxy { INSIDE, V_CENTER, H_CENTER; diff --git a/src/net/sourceforge/plantuml/elk/proxy/core/options/SizeConstraint.java b/src/net/sourceforge/plantuml/elk/proxy/core/options/SizeConstraint.java index 4d1715403..edd20854d 100644 --- a/src/net/sourceforge/plantuml/elk/proxy/core/options/SizeConstraint.java +++ b/src/net/sourceforge/plantuml/elk/proxy/core/options/SizeConstraint.java @@ -1,9 +1,9 @@ package net.sourceforge.plantuml.elk.proxy.core.options; -import net.sourceforge.plantuml.elk.proxy.EnumProxy; +import net.sourceforge.plantuml.elk.proxy.ElkObjectProxy; import net.sourceforge.plantuml.elk.proxy.Reflect; -public enum SizeConstraint implements EnumProxy { +public enum SizeConstraint implements ElkObjectProxy { NODE_LABELS; @Override diff --git a/src/net/sourceforge/plantuml/elk/proxy/graph/ElkWithProperty.java b/src/net/sourceforge/plantuml/elk/proxy/graph/ElkWithProperty.java index 2500af94c..32d8d196c 100644 --- a/src/net/sourceforge/plantuml/elk/proxy/graph/ElkWithProperty.java +++ b/src/net/sourceforge/plantuml/elk/proxy/graph/ElkWithProperty.java @@ -3,7 +3,7 @@ package net.sourceforge.plantuml.elk.proxy.graph; import java.util.Collection; import java.util.EnumSet; -import net.sourceforge.plantuml.elk.proxy.EnumProxy; +import net.sourceforge.plantuml.elk.proxy.ElkObjectProxy; import net.sourceforge.plantuml.elk.proxy.Reflect; public class ElkWithProperty { @@ -32,15 +32,15 @@ public class ElkWithProperty { if (value instanceof EnumSet) { EnumSet result = null; for (Object foo : (Collection) value) { - final EnumProxy elk = (EnumProxy) foo; + final ElkObjectProxy elk = (ElkObjectProxy) foo; if (result == null) { result = EnumSet.noneOf((Class) elk.getClass()); } result.add(elk); } Reflect.call2(obj, "setProperty", key, result); - } else if (value instanceof EnumProxy) { - final Enum elk = ((EnumProxy) value).getTrueObject(); + } else if (value instanceof ElkObjectProxy) { + final Object elk = ((ElkObjectProxy) value).getTrueObject(); Reflect.call2(obj, "setProperty", key, elk); } else { Reflect.call2(obj, "setProperty", key, value); diff --git a/src/net/sourceforge/plantuml/preproc2/PreprocessorUtils.java b/src/net/sourceforge/plantuml/preproc2/PreprocessorUtils.java index 12167ada2..efd217718 100644 --- a/src/net/sourceforge/plantuml/preproc2/PreprocessorUtils.java +++ b/src/net/sourceforge/plantuml/preproc2/PreprocessorUtils.java @@ -90,6 +90,17 @@ public class PreprocessorUtils { return result; } + public static ReadLine getReaderTheme(StringLocated s, String filename) { + Log.info("Loading theme " + filename); + final String res = "/themes/puml-theme-" + filename + ".puml"; + final String description = "<" + res + ">"; + final InputStream is = Stdlib.class.getResourceAsStream(res); + if (is == null) { + return null; + } + return ReadLineReader.create(new InputStreamReader(is), description); + } + public static ReadLine getReaderStdlibInclude(StringLocated s, String filename) { Log.info("Loading sdlib " + filename); InputStream is = getStdlibInputStream(filename); diff --git a/src/net/sourceforge/plantuml/project/GanttArrow.java b/src/net/sourceforge/plantuml/project/GanttArrow.java index 85319a03b..0e18a0711 100644 --- a/src/net/sourceforge/plantuml/project/GanttArrow.java +++ b/src/net/sourceforge/plantuml/project/GanttArrow.java @@ -43,7 +43,6 @@ import net.sourceforge.plantuml.project.core.TaskAttribute; import net.sourceforge.plantuml.project.core.TaskInstant; import net.sourceforge.plantuml.project.draw.TaskDraw; import net.sourceforge.plantuml.project.timescale.TimeScale; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; 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/project/GanttDiagram.java b/src/net/sourceforge/plantuml/project/GanttDiagram.java index cdd223f73..d24d55e0c 100644 --- a/src/net/sourceforge/plantuml/project/GanttDiagram.java +++ b/src/net/sourceforge/plantuml/project/GanttDiagram.java @@ -118,6 +118,7 @@ public class GanttDiagram extends TitledDiagram implements ToTaskDraw, WithSprit private final Map colorDays = new HashMap(); private final Map colorDaysOfWeek = new HashMap(); private final Map nameDays = new HashMap(); + private LabelStrategy labelStrategy = LabelStrategy.LEGACY; // Let's follow ISO-8601 rules private WeekNumberStrategy weekNumberStrategy = new WeekNumberStrategy(DayOfWeek.MONDAY, 4); @@ -218,6 +219,8 @@ public class GanttDiagram extends TitledDiagram implements ToTaskDraw, WithSprit public void drawU(UGraphic ug) { try { + final UGraphic ugOrig = ug; + ug = ug.apply(UTranslate.dx(getLeftColumnWidth(ug.getStringBounder()))); final Style timelineStyle = StyleSignature .of(SName.root, SName.element, SName.ganttDiagram, SName.timeline) .getMergedStyle(getCurrentStyleBuilder()); @@ -236,7 +239,7 @@ public class GanttDiagram extends TitledDiagram implements ToTaskDraw, WithSprit drawConstraints(ug, timeHeader.getTimeScale()); drawTasksRect(ug); - drawTasksTitle(ug); + drawTasksTitle(ugOrig, getLeftColumnWidth(ug.getStringBounder())); drawResources(ug); if (showFootbox) { timeHeader.drawTimeFooter(ug.apply(UTranslate.dy(totalHeightWithoutFooter))); @@ -249,6 +252,13 @@ public class GanttDiagram extends TitledDiagram implements ToTaskDraw, WithSprit } } + private double getLeftColumnWidth(StringBounder stringBounder) { + if (labelStrategy == LabelStrategy.LEGACY) { + return 0; + } + return getLeftColumnWidthInternal(stringBounder); + } + public Rectangle2D getInnerPosition(String member, StringBounder stringBounder, InnerStrategy strategy) { return null; } @@ -256,7 +266,8 @@ public class GanttDiagram extends TitledDiagram implements ToTaskDraw, WithSprit public Dimension2D calculateDimension(StringBounder stringBounder) { final double xmin = timeHeader.getTimeScale().getStartingPosition(min); final double xmax = timeHeader.getTimeScale().getEndingPosition(max); - return new Dimension2DDouble(xmax - xmin, getTotalHeight(timeHeader)); + return new Dimension2DDouble(getLeftColumnWidth(stringBounder) + xmax - xmin, + getTotalHeight(timeHeader)); } public MinMax getMinMax(StringBounder stringBounder) { @@ -327,14 +338,26 @@ public class GanttDiagram extends TitledDiagram implements ToTaskDraw, WithSprit return StyleSignature.of(SName.root, SName.element, SName.ganttDiagram, SName.arrow); } - private void drawTasksTitle(final UGraphic ug1) { + private double getLeftColumnWidthInternal(StringBounder stringBounder) { + double width = 0; for (Task task : tasks.values()) { if (isHidden(task)) { continue; } final TaskDraw draw = draws.get(task); - final UTranslate move = UTranslate.dy(draw.getY(ug1.getStringBounder())); - draw.drawTitle(ug1.apply(move)); + width = Math.max(width, draw.getTitleWidth(stringBounder)); + } + return width; + } + + private void drawTasksTitle(UGraphic ug, double leftColumnWidth) { + for (Task task : tasks.values()) { + if (isHidden(task)) { + continue; + } + final TaskDraw draw = draws.get(task); + final UTranslate move = UTranslate.dy(draw.getY(ug.getStringBounder())); + draw.drawTitle(ug.apply(move), labelStrategy, leftColumnWidth); } } @@ -596,14 +619,10 @@ public class GanttDiagram extends TitledDiagram implements ToTaskDraw, WithSprit } public Day getStartingDate() { - return openClose.getCalendar(); - } - - public Day getStartingDate(int nday) { if (openClose.getCalendar() == null) { - return null; + return min; } - return openClose.getCalendar().addDays(nday); + return openClose.getCalendar(); } public int daysInWeek() { @@ -757,4 +776,8 @@ public class GanttDiagram extends TitledDiagram implements ToTaskDraw, WithSprit return ClockwiseTopRightBottomLeft.none(); } + public void labelOnFirstColumn() { + this.labelStrategy = LabelStrategy.LEFT_COLUMN; + } + } diff --git a/src/net/sourceforge/plantuml/project/GanttDiagramFactory.java b/src/net/sourceforge/plantuml/project/GanttDiagramFactory.java index 5b44f3dd8..761118ca9 100644 --- a/src/net/sourceforge/plantuml/project/GanttDiagramFactory.java +++ b/src/net/sourceforge/plantuml/project/GanttDiagramFactory.java @@ -48,6 +48,7 @@ import net.sourceforge.plantuml.project.command.CommandColorTask; import net.sourceforge.plantuml.project.command.CommandFootbox; import net.sourceforge.plantuml.project.command.CommandGanttArrow; import net.sourceforge.plantuml.project.command.CommandGanttArrow2; +import net.sourceforge.plantuml.project.command.CommandLabelOnFirstColumn; import net.sourceforge.plantuml.project.command.CommandNoteBottom; import net.sourceforge.plantuml.project.command.CommandPage; import net.sourceforge.plantuml.project.command.CommandPrintBetween; @@ -105,6 +106,7 @@ public class GanttDiagramFactory extends PSystemCommandFactory { cmds.add(new CommandPage()); cmds.add(new CommandNoteBottom()); cmds.add(new CommandFootbox()); + cmds.add(new CommandLabelOnFirstColumn()); // cmds.add(new CommandScaleWidthAndHeight()); // cmds.add(new CommandScaleWidthOrHeight()); diff --git a/src/net/sourceforge/plantuml/project/LabelStrategy.java b/src/net/sourceforge/plantuml/project/LabelStrategy.java new file mode 100644 index 000000000..ed5506158 --- /dev/null +++ b/src/net/sourceforge/plantuml/project/LabelStrategy.java @@ -0,0 +1,42 @@ +/* ======================================================================== + * PlantUML : a free UML diagram generator + * ======================================================================== + * + * (C) Copyright 2009-2020, Arnaud Roques + * + * Project Info: http://plantuml.com + * + * If you like this project or if you find it useful, you can support us at: + * + * http://plantuml.com/patreon (only 1$ per month!) + * http://plantuml.com/paypal + * + * This file is part of PlantUML. + * + * PlantUML is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * PlantUML distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + * License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + * USA. + * + * + * Original Author: Arnaud Roques + * + * + */ +package net.sourceforge.plantuml.project; + +public enum LabelStrategy { + + LEGACY, LEFT_COLUMN + +} diff --git a/src/net/sourceforge/plantuml/wbs/CommandWBSPlus.java b/src/net/sourceforge/plantuml/project/command/CommandLabelOnFirstColumn.java similarity index 56% rename from src/net/sourceforge/plantuml/wbs/CommandWBSPlus.java rename to src/net/sourceforge/plantuml/project/command/CommandLabelOnFirstColumn.java index dd72aa237..aa0b79856 100644 --- a/src/net/sourceforge/plantuml/wbs/CommandWBSPlus.java +++ b/src/net/sourceforge/plantuml/project/command/CommandLabelOnFirstColumn.java @@ -33,47 +33,38 @@ * * */ -package net.sourceforge.plantuml.wbs; +package net.sourceforge.plantuml.project.command; -import net.sourceforge.plantuml.Direction; 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.RegexOptional; import net.sourceforge.plantuml.command.regex.RegexResult; -import net.sourceforge.plantuml.mindmap.IdeaShape; -import net.sourceforge.plantuml.ugraphic.color.HColor; -import net.sourceforge.plantuml.ugraphic.color.NoSuchColorException; +import net.sourceforge.plantuml.project.GanttDiagram; -public class CommandWBSPlus extends SingleLineCommand2 { +public class CommandLabelOnFirstColumn extends SingleLineCommand2 { - public CommandWBSPlus() { - super(false, getRegexConcat()); + public CommandLabelOnFirstColumn() { + super(getRegexConcat()); } static IRegex getRegexConcat() { - return RegexConcat.build(CommandWBSPlus.class.getName(), RegexLeaf.start(), // - new RegexLeaf("TYPE", "([+-]+)"), // - new RegexOptional(new RegexLeaf("BACKCOLOR", "\\[(#\\w+)\\]")), // - new RegexLeaf("SHAPE", "(_)?"), // + return RegexConcat.build(CommandLabelOnFirstColumn.class.getName(), RegexLeaf.start(), // + new RegexLeaf("labels?"), // RegexLeaf.spaceOneOrMore(), // - new RegexLeaf("LABEL", "([^%s].*)"), RegexLeaf.end()); + new RegexLeaf("on"), // + RegexLeaf.spaceZeroOrMore(), // + new RegexLeaf("first"), // + RegexLeaf.spaceZeroOrMore(), // + new RegexLeaf("column"), RegexLeaf.end()); // } @Override - protected CommandExecutionResult executeArg(WBSDiagram diagram, LineLocation location, RegexResult arg) throws NoSuchColorException { - final String type = arg.get("TYPE", 0); - final String label = arg.get("LABEL", 0); - final Direction dir = type.contains("-") ? Direction.LEFT : Direction.RIGHT; - final String stringColor = arg.get("BACKCOLOR", 0); - HColor backColor = null; - if (stringColor != null) { - backColor = diagram.getSkinParam().getIHtmlColorSet().getColor(stringColor); - } - return diagram.addIdea(backColor, type.length() - 1, label, dir, IdeaShape.fromDesc(arg.get("SHAPE", 0))); + protected CommandExecutionResult executeArg(GanttDiagram diagram, LineLocation location, RegexResult arg) { + diagram.labelOnFirstColumn(); + return CommandExecutionResult.ok(); } } diff --git a/src/net/sourceforge/plantuml/project/draw/AbstractTaskDraw.java b/src/net/sourceforge/plantuml/project/draw/AbstractTaskDraw.java index daa37bf76..a61ee2c4e 100644 --- a/src/net/sourceforge/plantuml/project/draw/AbstractTaskDraw.java +++ b/src/net/sourceforge/plantuml/project/draw/AbstractTaskDraw.java @@ -41,6 +41,7 @@ import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.cucadiagram.Display; import net.sourceforge.plantuml.graphic.FontConfiguration; import net.sourceforge.plantuml.graphic.StringBounder; +import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.project.ToTaskDraw; import net.sourceforge.plantuml.project.core.Task; import net.sourceforge.plantuml.project.lang.CenterBorderColor; @@ -110,6 +111,15 @@ public abstract class AbstractTaskDraw implements TaskDraw { final protected Style getStyle() { return getStyleSignature().getMergedStyle(styleBuilder); } + + final public double getTitleWidth(StringBounder stringBounder) { + final Style style = getStyleSignature().getMergedStyle(getStyleBuilder()); + final ClockwiseTopRightBottomLeft margin = style.getMargin(); + return margin.getLeft() + getTitle().calculateDimension(stringBounder).getWidth() + margin.getRight(); + } + + + protected abstract TextBlock getTitle(); abstract protected double getShapeHeight(StringBounder stringBounder); diff --git a/src/net/sourceforge/plantuml/project/draw/TaskDraw.java b/src/net/sourceforge/plantuml/project/draw/TaskDraw.java index 4d521a9b4..e125627c9 100644 --- a/src/net/sourceforge/plantuml/project/draw/TaskDraw.java +++ b/src/net/sourceforge/plantuml/project/draw/TaskDraw.java @@ -40,6 +40,7 @@ import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.cucadiagram.Display; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.UDrawable; +import net.sourceforge.plantuml.project.LabelStrategy; import net.sourceforge.plantuml.project.core.Task; import net.sourceforge.plantuml.project.core.TaskAttribute; import net.sourceforge.plantuml.project.lang.CenterBorderColor; @@ -56,8 +57,10 @@ public interface TaskDraw extends UDrawable { public double getY(StringBounder stringBounder, Direction direction); public void pushMe(double deltaY); + + public void drawTitle(UGraphic ug, LabelStrategy labelStrategy, double leftColumnWidth); - public void drawTitle(UGraphic ug); + public double getTitleWidth(StringBounder stringBounder); public double getFullHeightTask(StringBounder stringBounder); @@ -73,5 +76,4 @@ public interface TaskDraw extends UDrawable { public double getX2(TaskAttribute taskAttribute); - } diff --git a/src/net/sourceforge/plantuml/project/draw/TaskDrawDiamond.java b/src/net/sourceforge/plantuml/project/draw/TaskDrawDiamond.java index 191b5960b..4e783ac21 100644 --- a/src/net/sourceforge/plantuml/project/draw/TaskDrawDiamond.java +++ b/src/net/sourceforge/plantuml/project/draw/TaskDrawDiamond.java @@ -41,6 +41,7 @@ import net.sourceforge.plantuml.cucadiagram.Display; import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; +import net.sourceforge.plantuml.project.LabelStrategy; import net.sourceforge.plantuml.project.ToTaskDraw; import net.sourceforge.plantuml.project.core.Task; import net.sourceforge.plantuml.project.core.TaskAttribute; @@ -84,28 +85,40 @@ public class TaskDrawDiamond extends AbstractTaskDraw { } - final public void drawTitle(UGraphic ug) { + @Override + final public void drawTitle(UGraphic ug, LabelStrategy labelStrategy, double leftColumnWidth) { final Style style = getStyle(); final ClockwiseTopRightBottomLeft margin = style.getMargin(); final ClockwiseTopRightBottomLeft padding = style.getPadding(); + + final TextBlock title = getTitle(); + ug = ug.apply(UTranslate.dy(margin.getTop())); - final TextBlock title = Display.getWithNewlines(prettyDisplay).create(getFontConfiguration(), - HorizontalAlignment.LEFT, new SpriteContainerEmpty()); final StringBounder stringBounder = ug.getStringBounder(); final double titleHeight = title.calculateDimension(stringBounder).getHeight(); final double h = (getShapeHeight(stringBounder) - titleHeight) / 2; - final double x1 = timeScale.getStartingPosition(start); - final double x2 = timeScale.getEndingPosition(start); - final double width = getShapeHeight(ug.getStringBounder()); - final double delta = x2 - x1 - width; - - final double x = x2 - delta / 2 + padding.getLeft(); + final double x; + if (labelStrategy == LabelStrategy.LEFT_COLUMN) { + x = margin.getLeft(); + } else { + final double x1 = timeScale.getStartingPosition(start); + final double x2 = timeScale.getEndingPosition(start); + final double width = getShapeHeight(ug.getStringBounder()); + final double delta = x2 - x1 - width; + x = x2 - delta / 2 + padding.getLeft(); + } title.drawU(ug.apply(new UTranslate(x, h))); } + @Override + protected TextBlock getTitle() { + return Display.getWithNewlines(prettyDisplay).create(getFontConfiguration(), HorizontalAlignment.LEFT, + new SpriteContainerEmpty()); + } + public void drawU(UGraphic ug) { final Style style = getStyle(); diff --git a/src/net/sourceforge/plantuml/project/draw/TaskDrawRegular.java b/src/net/sourceforge/plantuml/project/draw/TaskDrawRegular.java index d45e66f94..1961ee086 100644 --- a/src/net/sourceforge/plantuml/project/draw/TaskDrawRegular.java +++ b/src/net/sourceforge/plantuml/project/draw/TaskDrawRegular.java @@ -53,6 +53,7 @@ import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.project.GanttConstraint; +import net.sourceforge.plantuml.project.LabelStrategy; import net.sourceforge.plantuml.project.ToTaskDraw; import net.sourceforge.plantuml.project.core.Task; import net.sourceforge.plantuml.project.core.TaskAttribute; @@ -111,19 +112,26 @@ public class TaskDrawRegular extends AbstractTaskDraw { protected double getShapeHeight(StringBounder stringBounder) { final Style style = getStyle(); final ClockwiseTopRightBottomLeft padding = style.getPadding(); - return padding.getTop() + getTextBlock().calculateDimension(stringBounder).getHeight() + padding.getBottom(); + return padding.getTop() + getTitle().calculateDimension(stringBounder).getHeight() + padding.getBottom(); } - public void drawTitle(UGraphic ug) { - final TextBlock title = getTextBlock(); + @Override + public void drawTitle(UGraphic ug, LabelStrategy labelStrategy, double leftColumnWidth) { + final TextBlock title = getTitle(); final StringBounder stringBounder = ug.getStringBounder(); final Dimension2D dim = title.calculateDimension(stringBounder); final Style style = getStyleSignature().getMergedStyle(getStyleBuilder()); final ClockwiseTopRightBottomLeft margin = style.getMargin(); final ClockwiseTopRightBottomLeft padding = style.getPadding(); + ug = ug.apply(UTranslate.dy(margin.getTop() + padding.getTop())); + if (labelStrategy == LabelStrategy.LEFT_COLUMN) { + title.drawU(ug.apply(UTranslate.dx(margin.getLeft()))); + return; + } + final double pos1 = timeScale.getStartingPosition(start) + 6; final double pos2 = timeScale.getEndingPosition(end) - 6; final double pos; @@ -134,7 +142,8 @@ public class TaskDrawRegular extends AbstractTaskDraw { title.drawU(ug.apply(UTranslate.dx(pos))); } - private TextBlock getTextBlock() { + @Override + protected TextBlock getTitle() { return Display.getWithNewlines(prettyDisplay).create(getFontConfiguration(), HorizontalAlignment.LEFT, new SpriteContainerEmpty()); } diff --git a/src/net/sourceforge/plantuml/project/draw/TaskDrawSeparator.java b/src/net/sourceforge/plantuml/project/draw/TaskDrawSeparator.java index a92bf79a8..cd6452891 100644 --- a/src/net/sourceforge/plantuml/project/draw/TaskDrawSeparator.java +++ b/src/net/sourceforge/plantuml/project/draw/TaskDrawSeparator.java @@ -44,6 +44,7 @@ import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.TextBlockUtils; +import net.sourceforge.plantuml.project.LabelStrategy; import net.sourceforge.plantuml.project.core.Task; import net.sourceforge.plantuml.project.core.TaskAttribute; import net.sourceforge.plantuml.project.lang.CenterBorderColor; @@ -84,12 +85,19 @@ public class TaskDrawSeparator implements TaskDraw { this.max = max; } - public void drawTitle(UGraphic ug) { + @Override + public void drawTitle(UGraphic ug, LabelStrategy labelStrategy, double leftColumnWidth) { final ClockwiseTopRightBottomLeft padding = getStyle().getPadding(); final ClockwiseTopRightBottomLeft margin = getStyle().getMargin(); final double dx = margin.getLeft() + padding.getLeft(); final double dy = margin.getTop() + padding.getTop(); - getTitle().drawU(ug.apply(new UTranslate(dx, dy))); + getTitle().drawU(ug.apply(new UTranslate(leftColumnWidth + dx, dy))); + } + + @Override + public double getTitleWidth(StringBounder stringBounder) { + // Never used in first column + return 0; } private StyleSignature getStyleSignature() { diff --git a/src/net/sourceforge/plantuml/project/lang/ComplementDate.java b/src/net/sourceforge/plantuml/project/lang/ComplementDate.java index 393b637a5..764e3a71b 100644 --- a/src/net/sourceforge/plantuml/project/lang/ComplementDate.java +++ b/src/net/sourceforge/plantuml/project/lang/ComplementDate.java @@ -108,7 +108,7 @@ public class ComplementDate implements Something { private Day resultD(GanttDiagram system, RegexResult arg, String suffix) { final int day = Integer.parseInt(arg.get("DCOUNT" + suffix, 0)); - return system.getStartingDate(day); + return system.getStartingDate().addDays(day); } private Day resultA(RegexResult arg, String suffix) { diff --git a/src/net/sourceforge/plantuml/project/lang/SentenceHappensDate.java b/src/net/sourceforge/plantuml/project/lang/SentenceHappensDate.java index 5390f3abf..7090240fa 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentenceHappensDate.java +++ b/src/net/sourceforge/plantuml/project/lang/SentenceHappensDate.java @@ -52,10 +52,10 @@ public class SentenceHappensDate extends SentenceSimple { final Task task = (Task) subject; task.setLoad(Load.inWinks(1)); final Day start = (Day) complement; - final Day startingDate = project.getStartingDate(); - if (startingDate == null) { - return CommandExecutionResult.error("No starting date for the project"); - } +// final Day startingDate = project.getStartingDate2(); +// if (startingDate == null) { +// return CommandExecutionResult.error("No starting date for the project"); +// } task.setStart(start); task.setDiamond(true); return CommandExecutionResult.ok(); diff --git a/src/net/sourceforge/plantuml/project/lang/SentencePausesDate.java b/src/net/sourceforge/plantuml/project/lang/SentencePausesDate.java index 1960a01a7..ee2d3bd22 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentencePausesDate.java +++ b/src/net/sourceforge/plantuml/project/lang/SentencePausesDate.java @@ -50,10 +50,10 @@ public class SentencePausesDate extends SentenceSimple { public CommandExecutionResult execute(GanttDiagram project, Object subject, Object complement) { final Task task = (Task) subject; final Day pause = (Day) complement; - final Day startingDate = project.getStartingDate(); - if (startingDate == null) { - return CommandExecutionResult.error("No starting date for the project"); - } +// final Day startingDate = project.getStartingDate(); +// if (startingDate == null) { +// return CommandExecutionResult.error("No starting date for the project"); +// } task.addPause(pause); return CommandExecutionResult.ok(); } diff --git a/src/net/sourceforge/plantuml/project/lang/SentencePausesDates.java b/src/net/sourceforge/plantuml/project/lang/SentencePausesDates.java index c729c980e..3ccb64f32 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentencePausesDates.java +++ b/src/net/sourceforge/plantuml/project/lang/SentencePausesDates.java @@ -51,10 +51,10 @@ public class SentencePausesDates extends SentenceSimple { public CommandExecutionResult execute(GanttDiagram project, Object subject, Object complement) { final Task task = (Task) subject; final DaysAsDates pauses = (DaysAsDates) complement; - final Day startingDate = project.getStartingDate(); - if (startingDate == null) { - return CommandExecutionResult.error("No starting date for the project"); - } +// final Day startingDate = project.getStartingDate(); +// if (startingDate == null) { +// return CommandExecutionResult.error("No starting date for the project"); +// } for (Day day : pauses) { task.addPause(day); } diff --git a/src/net/sourceforge/plantuml/project/lang/SentenceTaskEndsAbsolute.java b/src/net/sourceforge/plantuml/project/lang/SentenceTaskEndsAbsolute.java index a38f1cc3c..73fbe6237 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentenceTaskEndsAbsolute.java +++ b/src/net/sourceforge/plantuml/project/lang/SentenceTaskEndsAbsolute.java @@ -50,10 +50,10 @@ public class SentenceTaskEndsAbsolute extends SentenceSimple { public CommandExecutionResult execute(GanttDiagram project, Object subject, Object complement) { final Task task = (Task) subject; final Day end = (Day) complement; - final Day startingDate = project.getStartingDate(); - if (startingDate == null) { - return CommandExecutionResult.error("No starting date for the project"); - } +// final Day startingDate = project.getStartingDate(); +// if (startingDate == null) { +// return CommandExecutionResult.error("No starting date for the project"); +// } task.setEnd(end); return CommandExecutionResult.ok(); } diff --git a/src/net/sourceforge/plantuml/project/lang/SentenceTaskStartsAbsolute.java b/src/net/sourceforge/plantuml/project/lang/SentenceTaskStartsAbsolute.java index b072e6120..bd13f01de 100644 --- a/src/net/sourceforge/plantuml/project/lang/SentenceTaskStartsAbsolute.java +++ b/src/net/sourceforge/plantuml/project/lang/SentenceTaskStartsAbsolute.java @@ -50,10 +50,10 @@ public class SentenceTaskStartsAbsolute extends SentenceSimple { public CommandExecutionResult execute(GanttDiagram project, Object subject, Object complement) { final Task task = (Task) subject; final Day start = (Day) complement; - final Day startingDate = project.getStartingDate(); - if (startingDate == null) { - return CommandExecutionResult.error("No starting date for the project"); - } +// final Day startingDate = project.getStartingDate(); +// if (startingDate == null) { +// return CommandExecutionResult.error("No starting date for the project"); +// } task.setStart(start); return CommandExecutionResult.ok(); } diff --git a/src/net/sourceforge/plantuml/tim/EaterTheme.java b/src/net/sourceforge/plantuml/tim/EaterTheme.java new file mode 100644 index 000000000..29603710d --- /dev/null +++ b/src/net/sourceforge/plantuml/tim/EaterTheme.java @@ -0,0 +1,60 @@ +/* ======================================================================== + * PlantUML : a free UML diagram generator + * ======================================================================== + * + * (C) Copyright 2009-2020, Arnaud Roques + * + * Project Info: http://plantuml.com + * + * If you like this project or if you find it useful, you can support us at: + * + * http://plantuml.com/patreon (only 1$ per month!) + * http://plantuml.com/paypal + * + * This file is part of PlantUML. + * + * PlantUML is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * PlantUML distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + * License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + * USA. + * + * + * Original Author: Arnaud Roques + * + */ +package net.sourceforge.plantuml.tim; + +import net.sourceforge.plantuml.StringLocated; + +public class EaterTheme extends Eater { + + private String location; + + public EaterTheme(StringLocated s) { + super(s); + } + + @Override + public void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated { + skipSpaces(); + checkAndEatChar("!theme"); + skipSpaces(); + this.location = context.applyFunctionsAndVariables(memory, getLineLocation(), this.eatAllToEnd()); + + } + + public final String getLocation() { + return location; + } + +} diff --git a/src/net/sourceforge/plantuml/tim/TContext.java b/src/net/sourceforge/plantuml/tim/TContext.java index 585158bf9..2845ed09e 100644 --- a/src/net/sourceforge/plantuml/tim/TContext.java +++ b/src/net/sourceforge/plantuml/tim/TContext.java @@ -268,6 +268,9 @@ public class TContext { if (type == TLineType.INCLUDESUB) { this.executeIncludesub(memory, s); return null; + } else if (type == TLineType.THEME) { + this.executeTheme(memory, s); + return null; } else if (type == TLineType.INCLUDE) { this.executeInclude(memory, s); return null; @@ -542,6 +545,36 @@ public class TContext { } } + private void executeTheme(TMemory memory, StringLocated s) throws EaterException, EaterExceptionLocated { + final EaterTheme include = new EaterTheme(s.getTrimmed()); + include.analyze(this, memory); + final String location = include.getLocation(); + final ReadLine reader = PreprocessorUtils.getReaderTheme(s, location); + if (reader == null) { + throw EaterException.located("No such theme " + location); + } + try { + final List body = new ArrayList(); + do { + final StringLocated sl = reader.readLine(); + if (sl == null) { + executeLines(memory, body, null, false); + return; + } + body.add(sl); + } while (true); + } catch (IOException e) { + e.printStackTrace(); + throw EaterException.located("Error reading theme " + e); + } finally { + try { + reader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + private void executeInclude(TMemory memory, StringLocated s) throws EaterException, EaterExceptionLocated { final EaterInclude include = new EaterInclude(s.getTrimmed()); include.analyze(this, memory); @@ -554,7 +587,7 @@ public class TContext { location = location.substring(0, idx); } - ReadLine reader2 = null; + ReadLine reader = null; ImportedFiles saveImportedFiles = null; try { if (location.startsWith("http://") || location.startsWith("https://")) { @@ -562,9 +595,9 @@ public class TContext { if (url == null) { throw EaterException.located("Cannot open URL"); } - reader2 = PreprocessorUtils.getReaderIncludeUrl2(url, s, suf, charset); + reader = PreprocessorUtils.getReaderIncludeUrl2(url, s, suf, charset); } else if (location.startsWith("<") && location.endsWith(">")) { - reader2 = PreprocessorUtils.getReaderStdlibInclude(s, location.substring(1, location.length() - 1)); + reader = PreprocessorUtils.getReaderStdlibInclude(s, location.substring(1, location.length() - 1)); } else { final FileWithSuffix f2 = importedFiles.getFile(location, suf); if (f2.fileOk()) { @@ -576,25 +609,25 @@ public class TContext { } if (StartDiagramExtractReader.containsStartDiagram(f2, s, charset)) { - reader2 = StartDiagramExtractReader.build(f2, s, charset); + reader = StartDiagramExtractReader.build(f2, s, charset); } else { - final Reader reader = f2.getReader(charset); - if (reader == null) { + final Reader tmp = f2.getReader(charset); + if (tmp == null) { throw EaterException.located("Cannot include file"); } - reader2 = ReadLineReader.create(reader, location, s.getLocation()); + reader = ReadLineReader.create(tmp, location, s.getLocation()); } saveImportedFiles = this.importedFiles; this.importedFiles = this.importedFiles.withCurrentDir(f2.getParentFile()); - assert reader2 != null; + assert reader != null; filesUsedCurrent.add(f2); } } - if (reader2 != null) { + if (reader != null) { try { final List body = new ArrayList(); do { - final StringLocated sl = reader2.readLine(); + final StringLocated sl = reader.readLine(); if (sl == null) { executeLines(memory, body, null, false); return; @@ -611,9 +644,9 @@ public class TContext { e.printStackTrace(); throw EaterException.located("cannot include " + e); } finally { - if (reader2 != null) { + if (reader != null) { try { - reader2.close(); + reader.close(); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/net/sourceforge/plantuml/tim/TLineType.java b/src/net/sourceforge/plantuml/tim/TLineType.java index a2fcd55c0..b96fac85f 100644 --- a/src/net/sourceforge/plantuml/tim/TLineType.java +++ b/src/net/sourceforge/plantuml/tim/TLineType.java @@ -37,7 +37,8 @@ package net.sourceforge.plantuml.tim; public enum TLineType { PLAIN, AFFECTATION_DEFINE, AFFECTATION, ASSERT, IF, IFDEF, UNDEF, IFNDEF, ELSE, ELSEIF, ENDIF, WHILE, ENDWHILE, - FOREACH, ENDFOREACH, DECLARE_RETURN_FUNCTION, DECLARE_PROCEDURE, END_FUNCTION, RETURN, LEGACY_DEFINE, LEGACY_DEFINELONG, INCLUDE, INCLUDE_DEF, + FOREACH, ENDFOREACH, DECLARE_RETURN_FUNCTION, DECLARE_PROCEDURE, END_FUNCTION, RETURN, LEGACY_DEFINE, LEGACY_DEFINELONG, + THEME, INCLUDE, INCLUDE_DEF, IMPORT, STARTSUB, ENDSUB, INCLUDESUB, LOG, DUMP_MEMORY, COMMENT_SIMPLE, COMMENT_LONG_START; // private boolean elseLike() { @@ -122,6 +123,9 @@ public enum TLineType { if (s.matches("^\\s*!return\\b.*")) { return RETURN; } + if (s.matches("^\\s*!theme\\b.*")) { + return THEME; + } if (s.matches("^\\s*!(include|includeurl|include_many|include_once)\\b.*")) { return INCLUDE; } diff --git a/src/net/sourceforge/plantuml/version/License.java b/src/net/sourceforge/plantuml/version/License.java index ca62fdcb7..335fd61c5 100644 --- a/src/net/sourceforge/plantuml/version/License.java +++ b/src/net/sourceforge/plantuml/version/License.java @@ -539,6 +539,7 @@ public enum License { text.add("ASCIIMathML (c) David Lippman http://www.pierce.ctc.edu/dlippman"); text.add("CafeUndZopfli ported by Eugene Klyuchnikov https://github.com/eustas/CafeUndZopfli"); text.add("Brotli (c) by the Brotli Authors https://github.com/google/brotli"); + text.add("Themes (c) by Brett Schwarz https://github.com/bschwarz/puml-themes"); text.add(" "); } } diff --git a/src/net/sourceforge/plantuml/version/Version.java b/src/net/sourceforge/plantuml/version/Version.java index 0f2f87632..bbb125521 100644 --- a/src/net/sourceforge/plantuml/version/Version.java +++ b/src/net/sourceforge/plantuml/version/Version.java @@ -80,7 +80,7 @@ public class Version { } public static int beta() { - final int beta = 0; + final int beta = 2; return beta; } diff --git a/src/net/sourceforge/plantuml/wbs/CommandWBSOrgmode.java b/src/net/sourceforge/plantuml/wbs/CommandWBSItem.java similarity index 83% rename from src/net/sourceforge/plantuml/wbs/CommandWBSOrgmode.java rename to src/net/sourceforge/plantuml/wbs/CommandWBSItem.java index 77f2282c1..ff78f596f 100644 --- a/src/net/sourceforge/plantuml/wbs/CommandWBSOrgmode.java +++ b/src/net/sourceforge/plantuml/wbs/CommandWBSItem.java @@ -48,15 +48,15 @@ import net.sourceforge.plantuml.mindmap.IdeaShape; import net.sourceforge.plantuml.ugraphic.color.HColor; import net.sourceforge.plantuml.ugraphic.color.NoSuchColorException; -public class CommandWBSOrgmode extends SingleLineCommand2 { +public class CommandWBSItem extends SingleLineCommand2 { - public CommandWBSOrgmode() { + public CommandWBSItem() { super(false, getRegexConcat()); } static IRegex getRegexConcat() { - return RegexConcat.build(CommandWBSOrgmode.class.getName(), RegexLeaf.start(), // - new RegexLeaf("TYPE", "([*]+)"), // + return RegexConcat.build(CommandWBSItem.class.getName(), RegexLeaf.start(), // + new RegexLeaf("TYPE", "([ \t]*[*+-]+)"), // new RegexOptional(new RegexLeaf("BACKCOLOR", "\\[(#\\w+)\\]")), // new RegexLeaf("SHAPE", "(_)?"), // new RegexLeaf("DIRECTION", "([<>])?"), // @@ -74,9 +74,17 @@ public class CommandWBSOrgmode extends SingleLineCommand2 { if (stringColor != null) { backColor = diagram.getSkinParam().getIHtmlColorSet().getColor(stringColor); } + + Direction dir = type.contains("-") ? Direction.LEFT : Direction.RIGHT; final String direction = arg.get("DIRECTION", 0); - final Direction dir = "<".equals(direction) ? Direction.LEFT : Direction.RIGHT; - return diagram.addIdea(backColor, type.length() - 1, label, dir, IdeaShape.fromDesc(arg.get("SHAPE", 0))); + if ("<".equals(direction)) { + dir = Direction.LEFT; + } else if (">".equals(direction)) { + dir = Direction.RIGHT; + } + + return diagram.addIdea(backColor, diagram.getSmartLevel(type), label, dir, + IdeaShape.fromDesc(arg.get("SHAPE", 0))); } } diff --git a/src/net/sourceforge/plantuml/wbs/CommandWBSTabulation.java b/src/net/sourceforge/plantuml/wbs/CommandWBSTabulation.java deleted file mode 100644 index c326d370c..000000000 --- a/src/net/sourceforge/plantuml/wbs/CommandWBSTabulation.java +++ /dev/null @@ -1,79 +0,0 @@ -/* ======================================================================== - * PlantUML : a free UML diagram generator - * ======================================================================== - * - * (C) Copyright 2009-2020, Arnaud Roques - * - * Project Info: http://plantuml.com - * - * If you like this project or if you find it useful, you can support us at: - * - * http://plantuml.com/patreon (only 1$ per month!) - * http://plantuml.com/paypal - * - * This file is part of PlantUML. - * - * PlantUML is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * PlantUML distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - * License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, - * USA. - * - * - * Original Author: Arnaud Roques - * - * - */ -package net.sourceforge.plantuml.wbs; - -import net.sourceforge.plantuml.Direction; -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.RegexOptional; -import net.sourceforge.plantuml.command.regex.RegexResult; -import net.sourceforge.plantuml.mindmap.IdeaShape; -import net.sourceforge.plantuml.ugraphic.color.HColor; -import net.sourceforge.plantuml.ugraphic.color.NoSuchColorException; - -public class CommandWBSTabulation extends SingleLineCommand2 { - - public CommandWBSTabulation() { - super(false, getRegexConcat()); - } - - static IRegex getRegexConcat() { - return RegexConcat.build(CommandWBSTabulation.class.getName(), RegexLeaf.start(), // - new RegexLeaf("TYPE", "([ \t]*[*+-])"), // - new RegexOptional(new RegexLeaf("BACKCOLOR", "\\[(#\\w+)\\]")), // - new RegexLeaf("SHAPE", "(_)?"), // - RegexLeaf.spaceOneOrMore(), // - new RegexLeaf("LABEL", "([^%s].*)"), RegexLeaf.end()); - } - - @Override - protected CommandExecutionResult executeArg(WBSDiagram diagram, LineLocation location, RegexResult arg) throws NoSuchColorException { - final String type = arg.get("TYPE", 0); - final String label = arg.get("LABEL", 0); - final Direction dir = type.contains("-") ? Direction.LEFT : Direction.RIGHT; - final String stringColor = arg.get("BACKCOLOR", 0); - HColor backColor = null; - if (stringColor != null) { - backColor = diagram.getSkinParam().getIHtmlColorSet().getColor(stringColor); - } - return diagram.addIdea(backColor, type.length() - 1, label, dir, IdeaShape.fromDesc(arg.get("SHAPE", 0))); - } - -} diff --git a/src/net/sourceforge/plantuml/wbs/WBSDiagram.java b/src/net/sourceforge/plantuml/wbs/WBSDiagram.java index d4cdbfa75..2c3f2b8c3 100644 --- a/src/net/sourceforge/plantuml/wbs/WBSDiagram.java +++ b/src/net/sourceforge/plantuml/wbs/WBSDiagram.java @@ -75,9 +75,7 @@ public class WBSDiagram extends UmlDiagram { protected ImageData exportDiagramInternal(OutputStream os, int index, FileFormatOption fileFormatOption) throws IOException { - return createImageBuilder(fileFormatOption) - .drawable(getTextBlock()) - .write(os); + return createImageBuilder(fileFormatOption).drawable(getTextBlock()).write(os); } private TextBlockBackcolored getTextBlock() { @@ -143,6 +141,7 @@ public class WBSDiagram extends UmlDiagram { private WElement root; private WElement last; + private String first; private void initRoot(HColor backColor, String label, String stereotype, IdeaShape shape) { root = new WElement(backColor, Display.getWithNewlines(label), stereotype, @@ -158,6 +157,25 @@ public class WBSDiagram extends UmlDiagram { return result; } + public int getSmartLevel(String type) { + if (root == null) { + assert first == null; + first = type; + return 0; + } + type = type.replace('\t', ' '); + if (type.contains(" ") == false) { + return type.length() - 1; + } + if (type.trim().length() == 1) { + return type.length() - 1; + } + if (type.startsWith(first)) { + return type.length() - first.length(); + } + throw new UnsupportedOperationException("type=<" + type + ">[" + first + "]"); + } + private CommandExecutionResult add(HColor backColor, int level, String label, String stereotype, Direction direction, IdeaShape shape) { try { @@ -175,7 +193,7 @@ public class WBSDiagram extends UmlDiagram { last = newIdea; return CommandExecutionResult.ok(); } - return CommandExecutionResult.error("error42L"); + return CommandExecutionResult.error("Bad tree structure"); } catch (NoStyleAvailableException e) { // e.printStackTrace(); return CommandExecutionResult.error("General failure: no style available."); diff --git a/src/net/sourceforge/plantuml/wbs/WBSDiagramFactory.java b/src/net/sourceforge/plantuml/wbs/WBSDiagramFactory.java index c898d3545..03cc7c154 100644 --- a/src/net/sourceforge/plantuml/wbs/WBSDiagramFactory.java +++ b/src/net/sourceforge/plantuml/wbs/WBSDiagramFactory.java @@ -53,10 +53,8 @@ public class WBSDiagramFactory extends PSystemCommandFactory { final List cmds = new ArrayList(); addCommonCommands1(cmds); - cmds.add(new CommandWBSOrgmode()); - cmds.add(new CommandWBSPlus()); - cmds.add(new CommandWBSTabulation()); - + cmds.add(new CommandWBSItem()); + return cmds; } diff --git a/themes/puml-theme-black-knight.puml b/themes/puml-theme-black-knight.puml new file mode 100644 index 000000000..21d6958c8 --- /dev/null +++ b/themes/puml-theme-black-knight.puml @@ -0,0 +1,453 @@ +'' +'' Colors representing the black knight +'' +'' Author: Brett Schwarz + +!$THEME = "black-knight" + +!if %not(%variable_exists("$BGCOLOR")) +!$BGCOLOR = "transparent" +!endif + +skinparam backgroundColor $BGCOLOR +skinparam useBetaStyle false + +'' +'' Colors taken from the _default_colors.scss file +'' +!$PRIMARY = "#303030" +!$PRIMARY_DARK = "#262626" +!$PRIMARY_LIGHT = "#595959" +' !$PRIMARY_TEXT = "#0060a8" +!$PRIMARY_TEXT = "#fff200" +!$SECONDARY = "#484848" +!$SECONDARY_DARK = "#3a3a3a" +!$SECONDARY_LIGHT = "#6d6d6d" +!$SECONDARY_TEXT = "#fefefe" +!$SUCCESS = "#00FF00" +!$SUCCESS_DARK = "#00cc00" +!$SUCCESS_LIGHT = "#33ff33" +!$INFO = "#0060a8" +!$INFO_DARK = "#004d86" +!$INFO_LIGHT = "#3380b9" +!$WARNING = "#ff8000" +!$WARNING_DARK = "#cc6600" +!$WARNING_LIGHT = "#ff9933" +!$WARNING_TEXT = "#222222" +!$DANGER = "#ff0000" +!$DANGER_DARK = "#cc0000" +!$DANGER_LIGHT = "#ff3333" +!$LIGHT = "#fff200" +!$DARK = "#484848" + +!procedure $success($msg) + $msg +!endprocedure + +!procedure $failure($msg) + $msg +!endprocedure + +!procedure $warning($msg) + $msg +!endprocedure + +!procedure $primary_scheme() + FontColor $PRIMARY_TEXT + BorderColor $PRIMARY_DARK + BackgroundColor $PRIMARY_LIGHT-$PRIMARY_DARK +!endprocedure + +skinparam { + defaultFontName "Verdana" + defaultFontSize 12 + defaultTextAlignment center + shadowing false + RoundCorner 10 + TitleFontSize 18 + ' TitleFontColor $PRIMARY_TEXT +} + +'' +'' Global Default Values +'' +skinparam defaultFontName "Verdana" +skinparam defaultFontSize 12 +skinparam dpi 100 +skinparam shadowing false +skinparam roundcorner 8 +skinparam ParticipantPadding 40 +skinparam BoxPadding 40 +skinparam Padding 5 +skinparam ArrowColor $DARK +skinparam stereotype { + CBackgroundColor $SECONDARY_DARK + CBorderColor $SECONDARY_LIGHT + ABackgroundColor $SUCCESS_LIGHT + ABorderColor $SUCCESS_DARK + IBackgroundColor $DANGER_LIGHT + IBorderColor $DANGER_DARK + EBackgroundColor $WARNING_LIGHT + EBorderColor $WARNING_DARK + NBackgroundColor $INFO_LIGHT + NBorderColor $INFO_DARK +} +skinparam title { + FontColor $SECONDARY_TEXT + BorderColor $SECONDARY_DARK + FontSize 20 + BorderRoundCorner 8 + BorderThickness 1 + BackgroundColor $SECONDARY_LIGHT-$SECONDARY +} + + +skinparam legend { + BackgroundColor $PRIMARY + BorderColor $PRIMARY_DARK + FontColor $PRIMARY_TEXT +} + +!startsub swimlane + skinparam swimlane { + BorderColor $INFO + BorderThickness 2 + TitleBackgroundColor $SECONDARY_LIGHT-$SECONDARY + TitleFontColor $PRIMARY +} +!endsub + +!startsub activity +skinparam activity { + $primary_scheme() + BarColor $SUCCESS + StartColor $INFO + EndColor $INFO + '' + DiamondBackgroundColor $SECONDARY_LIGHT-$SECONDARY_DARK + DiamondBorderColor $SECONDARY_DARK + DiamondFontColor $SECONDARY_TEXT +} +!endsub + +!startsub participant + +skinparam participant { + $primary_scheme() + ParticipantBorderThickness 2 +} +!endsub + +!startsub actor + +skinparam actor { + $primary_scheme() +} +!endsub + +!startsub arrow + +skinparam arrow { + Thickness 3 + Color $PRIMARY + FontColor $FGCOLOR +} +!endsub + + +!startsub sequence + +skinparam sequence { + BorderColor $PRIMARY + ' For some reason sequence title font color does not pick up from global + TitleFontColor $PRIMARY + BackgroundColor $BGCOLOR + StartColor $PRIMARY + EndColor $PRIMARY + '' + BoxBackgroundColor $BGCOLOR + BoxBorderColor $DARK + BoxFontColor $DARK + '' + LifeLineBorderColor $SECONDARY + LifeLineBorderThickness 2 + LifeLineBackgroundColor $SECONDARY_DARK + '' + GroupBorderColor $DARK + GroupFontColor $DARK + GroupHeaderFontColor $INFO + GroupBackgroundColor $SECONDARY + GroupHeaderBackgroundColor $BGCOLOR + '' + DividerBackgroundColor $DARK + DividerBorderColor $DARK + DividerBorderThickness 2 + DividerFontColor $LIGHT + '' + ReferenceBackgroundColor $BGCOLOR + ReferenceBorderColor $DARK + ReferenceFontColor $SECONDARY_TEXT + ReferenceHeaderBackgroundColor $SECONDARY +} +!endsub + +!startsub partition + +skinparam partition { + BorderColor $PRIMARY + FontColor $PRIMARY_LIGHT + BackgroundColor $BGCOLOR +} +!endsub + +!startsub collections + +skinparam collections { + $primary_scheme() +} +!endsub + +!startsub control + +skinparam control { + $primary_scheme() +} +!endsub + +!startsub entity + +skinparam entity { + $primary_scheme() +} +!endsub + +!startsub boundary + +skinparam boundary { + $primary_scheme() +} +!endsub + +!startsub agent + +skinparam agent { + BackgroundColor $WARNING + BorderColor $WARNING_LIGHT + FontColor $DARK +} +!endsub + +!startsub note + +skinparam note { + BorderThickness 1 + BackgroundColor $INFO + BorderColor $INFO_DARK + FontColor $WHITE +} +!endsub + +!startsub artifact + +skinparam artifact { + BackgroundColor $DARK + BorderColor $DARK_DARK + FontColor $LIGHT +} +!endsub + +!startsub component + +skinparam component { + $primary_scheme() +} +!endsub + +!startsub interface + +skinparam interface { + BackgroundColor $DANGER_DARK + BorderColor $DANGER + FontColor $DARK +} +!endsub + +!startsub storage + +skinparam storage { + BackgroundColor $WARNING + BorderColor $WARNING_DARK + FontColor $WARNING_TEXT +} +!endsub + +!startsub node + +skinparam node { + BackgroundColor $BGCOLOR + BorderColor $PRIMARY_LIGHT + FontColor $PRIMARY_TEXT +} +!endsub + +!startsub cloud + +skinparam cloud { + BackgroundColor $DARK-black + BorderColor $DARK + FontColor $LIGHT +} +!endsub + +!startsub database + +skinparam database { + $primary_scheme() + BackgroundColor $BGCOLOR +} +!endsub + +!startsub class + +skinparam class { + $primary_scheme() + HeaderBackgroundColor $PRIMARY_LIGHT + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $LIGHT + AttributeFontSize 11 +} +!endsub + +!startsub object + +skinparam object { + $primary_scheme() + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub usecase + +skinparam usecase { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub rectangle + +skinparam rectangle { + $primary_scheme() + BackgroundColor $BGCOLOR + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub package + +skinparam package { + $primary_scheme() + BackgroundColor $BGCOLOR + BorderThickness 2 +} +!endsub + +!startsub folder + +skinparam folder { + BackgroundColor $SECONDARY_LIGHT + BorderColor $WARNING + FontColor $WARNING + BorderThickness 2 +} +!endsub + +!startsub frame + +skinparam frame { + BackgroundColor $SECONDARY_LIGHT + BorderColor $INFO + FontColor $INFO + BorderThickness 2 +} +!endsub + +!startsub state + +skinparam state { + $primary_scheme() + StartColor $INFO + EndColor $INFO + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub queue + +skinparam queue { + $primary_scheme() +} +!endsub + +!startsub card + +skinparam card { + BackgroundColor $INFO + BorderColor $INFO_DARK + FontColor $INFO_TEXT +} +!endsub + +!startsub file + +skinparam file { + BackgroundColor $SECONDARY_LIGHT-$SECONDARY + BorderColor $INFO + FontColor $SECONDARY_TEXT +} +!endsub + +!startsub stack + +skinparam stack { + $primary_scheme() +} +!endsub + +!if %variable_exists("NEWSTYLE") + +!endif diff --git a/themes/puml-theme-bluegray.puml b/themes/puml-theme-bluegray.puml new file mode 100644 index 000000000..7d61058ab --- /dev/null +++ b/themes/puml-theme-bluegray.puml @@ -0,0 +1,434 @@ +'' +'' A blue gray theme +'' +'' Author: Brett Schwarz +'' Copyright (c) 2019 by Brett Schwarz + +!$THEME = "bluegray" + +!if %not(%variable_exists("$BGCOLOR")) +!$BGCOLOR = "transparent" +!endif + +skinparam backgroundColor $BGCOLOR +skinparam useBetaStyle false + + +!$WHITE = "#fff" +!$GRAY_DARK = "#5a5a5a" +!$GRAY = "#959595" +!$PRIMARY = "#009fdb" +!$SECONDARY = "#f2f2f2" +!$SUCCESS = "#b5bd00" +!$INFO = "#0568ae" +!$WARNING = "#ea7400" +!$DANGER = "#cf2a2a" +!$LIGHT = "#d2d2d2" +!$DARK = "#5a5a5a" + +!$FGCOLOR = $DARK +!$PRIMARY_LIGHT = "#33b2e2" +!$PRIMARY_DARK = "#007faf" +!$PRIMARY_TEXT = $WHITE +!$SECONDARY_LIGHT = "#f5f5f5" +!$SECONDARY_DARK = "#c2c2c2" +!$SECONDARY_TEXT = $DARK +!$INFO_LIGHT = "#3786be" +!$INFO_DARK = "#04538b" +!$INFO_TEXT = $WHITE +!$SUCCESS_LIGHT = "#c4ca33" +!$SUCCESS_DARK = "#919700" +!$SUCCESS_TEXT = $WHITE +!$WARNING_LIGHT = "#ee9033" +!$WARNING_DARK = "#bb5d00" +!$WARNING_TEXT = $WHITE +!$DANGER_LIGHT = "#d95555" +!$DANGER_DARK = "#a62222" +!$DANGER_TEXT = $WHITE + +!procedure $success($msg) + $msg +!endprocedure + +!procedure $failure($msg) + $msg +!endprocedure + +!procedure $warning($msg) + $msg +!endprocedure + +!procedure $primary_scheme() + + FontColor $PRIMARY_TEXT + BorderColor $PRIMARY_LIGHT + BackgroundColor $PRIMARY_LIGHT-$PRIMARY + +!endprocedure + +!procedure $secondary_scheme() + FontColor $SECONDARY_TEXT + BorderColor $SECONDARY_DARK + BackgroundColor $WHITE-#fefefe +!endprocedure + +'' +'' Global Default Values +'' +skinparam defaultFontName "Verdana" +skinparam defaultFontSize 12 +skinparam dpi 100 +skinparam shadowing false +skinparam roundcorner 20 +skinparam ParticipantPadding 30 +skinparam BoxPadding 40 +skinparam Padding 8 +skinparam ArrowColor $GRAY +skinparam stereotype { + CBackgroundColor $SECONDARY_LIGHT + CBorderColor $SECONDARY_DARK + ABackgroundColor $SUCCESS_LIGHT + ABorderColor $SUCCESS_DARK + IBackgroundColor $DANGER_LIGHT + IBorderColor $DANGER_DARK + EBackgroundColor $WARNING_LIGHT + EBorderColor $WARNING_DARK + NBackgroundColor $INFO_LIGHT + NBorderColor $INFO_DARK +} +skinparam title { + FontColor $PRIMARY + BorderColor $SECONDARY_DARK + FontSize 20 + BorderRoundCorner 8 + BorderThickness 1 + BackgroundColor $SECONDARY_LIGHT-$SECONDARY +} + + +skinparam legend { + BackgroundColor $SECONDARY + BorderColor $SECONDARY_DARK + FontColor $DARK +} + +!startsub swimlane +skinparam swimlane { + BorderColor $INFO + BorderThickness 2 + TitleBackgroundColor $SECONDARY_LIGHT-$SECONDARY + TitleFontColor $PRIMARY +} +!endsub + +!startsub activity + +skinparam activity { + FontColor $PRIMARY_TEXT + BorderColor $PRIMARY + BackgroundColor $PRIMARY_LIGHT-$PRIMARY + BarColor $SUCCESS + StartColor $INFO + EndColor $INFO + '' + DiamondBackgroundColor $SECONDARY_LIGHT-$SECONDARY_DARK + DiamondBorderColor $SECONDARY_DARK + DiamondFontColor $SECONDARY_TEXT +} +!endsub + +!startsub participant + +skinparam participant { + $primary_scheme() + ParticipantBorderThickness 2 +} +!endsub + +!startsub actor + +skinparam actor { + $primary_scheme() + FontColor $PRIMARY +} +!endsub + +!startsub arrow + +skinparam arrow { + Thickness 3 + Color $PRIMARY + FontColor $FGCOLOR +} +!endsub + +!startsub sequence + +skinparam sequence { + BorderColor $PRIMARY + ' For some reason sequence title font color does not pick up from global + TitleFontColor $PRIMARY + BackgroundColor $BGCOLOR + StartColor $PRIMARY + EndColor $PRIMARY + '' + BoxBackgroundColor $LIGHT + BoxBorderColor $GRAY + BoxFontColor $DARK + '' + LifeLineBorderColor $SECONDARY_DARK + LifeLineBorderThickness 2 + LifeLineBackgroundColor $SECONDARY_LIGHT + '' + GroupBorderColor $GRAY + GroupFontColor $DARK + GroupHeaderFontColor $INFO + '' + DividerBackgroundColor $WHITE-$LIGHT + DividerBorderColor $GRAY + DividerBorderThickness 2 + DividerFontColor $DARK + '' + ReferenceBackgroundColor $BGCOLOR + ReferenceBorderColor $GRAY + ReferenceFontColor $DARK + ReferenceHeaderFontColor $INFO +} +!endsub + +!startsub partition + +skinparam partition { + BorderColor $PRIMARY + FontColor $PRIMARY + BackgroundColor $BGCOLOR +} +!endsub + +!startsub collections + +skinparam collections { + $primary_scheme() +} +!endsub + +!startsub control + +skinparam control { + $primary_scheme() + FontColor $PRIMARY +} +!endsub + +!startsub entity + +skinparam entity { + $primary_scheme() + FontColor $PRIMARY +} +!endsub + +!startsub boundary + +skinparam boundary { + $primary_scheme() + FontColor $PRIMARY +} +!endsub + +!startsub agent + +skinparam agent { + BackgroundColor #orange + BorderColor #999999 + FontColor #333333 +} +!endsub + +!startsub note + +skinparam note { + BorderThickness 1 + BackgroundColor $INFO_LIGHT-$INFO + BorderColor $INFO + FontColor $WHITE +} +!endsub + +!startsub artifact + +skinparam artifact { + BackgroundColor $WHITE-$LIGHT + BorderColor $SECONDARY_DARK + FontColor $SECONDARY_TEXT +} +!endsub + +!startsub component + +skinparam component { + $primary_scheme() +} +!endsub + +!startsub interface + +skinparam interface { + BackgroundColor $DANGER_LIGHT + BorderColor $DANGER + FontColor $DARK +} +!endsub + +!startsub storage + +skinparam storage { + BackgroundColor $WARNING_LIGHT-$WARNING + BorderColor $WARNING + FontColor $WARNING_TEXT +} +!endsub + +!startsub node + +skinparam node { + BackgroundColor $SECONDARY_LIGHT-$SECONDARY + BorderColor $SECONDARY_DARK + FontColor $PRIMARY +} +!endsub + +!startsub cloud + +skinparam cloud { + BackgroundColor #F2FCFE-#eeeeee + BorderColor #F2FCFE + FontColor $PRIMARY +} +!endsub + +!startsub database + +skinparam database { + $primary_scheme() + ' FontColor $PRIMARY + BorderColor $PRIMARY_DARK + ' BackgroundColor $BGCOLOR +} +!endsub + +!startsub class + +skinparam class { + $primary_scheme() + HeaderBackgroundColor $PRIMARY_LIGHT-$PRIMARY + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $LIGHT + AttributeFontSize 11 +} +!endsub + +!startsub object + +skinparam object { + $primary_scheme() + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $LIGHT + AttributeFontSize 11 +} +!endsub + +!startsub usecase + +skinparam usecase { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub rectangle + +skinparam rectangle { + $secondary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub package + +skinparam package { + FontColor $PRIMARY + BorderColor $PRIMARY_LIGHT + BackgroundColor $BGCOLOR + BorderThickness 2 +} +!endsub + +!startsub folder + +skinparam folder { + BackgroundColor $WHITE-$SECONDARY_LIGHT + BorderColor $WARNING + FontColor $WARNING + BorderThickness 2 +} +!endsub + +!startsub frame + +skinparam frame { + BackgroundColor $WHITE-$SECONDARY_LIGHT + BorderColor $INFO + FontColor $INFO + BorderThickness 2 +} +!endsub + +!startsub state + +skinparam state { + $primary_scheme() + BorderColor $PRIMARY_DARK + StartColor $INFO + EndColor $INFO + AttributeFontColor $LIGHT + AttributeFontSize 11 +} +!endsub + +!startsub queue + +skinparam queue { + $primary_scheme() +} +!endsub + +!startsub card + +skinparam card { + BackgroundColor $INFO_LIGHT-$INFO + BorderColor $INFO + FontColor $INFO_TEXT +} +!endsub + +!startsub file + +skinparam file { + BackgroundColor $SECONDARY_LIGHT-$SECONDARY + BorderColor $INFO + FontColor $SECONDARY_TEXT + +} +!endsub + +!startsub stack + +skinparam stack { + $primary_scheme() +} +!endsub diff --git a/themes/puml-theme-cerulean-outline.puml b/themes/puml-theme-cerulean-outline.puml new file mode 100644 index 000000000..17b2cd129 --- /dev/null +++ b/themes/puml-theme-cerulean-outline.puml @@ -0,0 +1,467 @@ +'' +'' Cerulean theme based off of the bootstrap theme of the same name +'' https://bootswatch.com/cerulean/ +'' +'' Author: Brett Schwarz +'' Copyright (c) 2019 by Brett Schwarz + +!$THEME = "cerulean-outline" + +!if %not(%variable_exists("$BGCOLOR")) +!$BGCOLOR = "transparent" +!endif + +skinparam backgroundColor $BGCOLOR +skinparam useBetaStyle false + +'' +'' Colors taken from the css file of the BS theme +'' +!$BLUE = "#033C73" +!$INDIGO = "#6610F2" +!$PURPLE = "#6F42C1" +!$PINK = "#E83E8C" +!$RED = "#C71C22" +!$ORANGE = "#FD7E14" +!$YELLOW = "#DD5600" +!$GREEN = "#73A839" +!$TEAL = "#20C997" +!$CYAN = "#2FA4E7" +!$WHITE = "#FFF" +!$GRAY_DARK = "#343A40" +!$GRAY = "#868E96" +!$PRIMARY = "#2FA4E7" +!$SECONDARY = "#E9ECEF" +!$SUCCESS = "#73A839" +!$INFO = "#033C73" +!$WARNING = "#DD5600" +!$DANGER = "#C71C22" +!$LIGHT = "#F8F9FA" +!$DARK = "#343A40" + +'' *_LIGHT = tint (lighter) of the main color of 80% +'' where TINT is calculated by clr + (255-clr) * tint_factor +'' *_DARK = shade (darker) of the main color of 80% +'' and SHADE is calculated by clr * (1 - shade_factor) +'' +!$FGCOLOR = $DARK +!$PRIMARY_LIGHT = "#59B6EC" +!$PRIMARY_DARK = "#2683B9" +!$PRIMARY_TEXT = $PRIMARY +!$SECONDARY_LIGHT = "#EDF0F2" +!$SECONDARY_DARK = "#BABDBF" +!$SECONDARY_TEXT = $SECONDARY_DARK +!$INFO_LIGHT = "#35638F" +!$INFO_TEXT = $INFO +!$SUCCESS_LIGHT = "#8FB961" +!$SUCCESS_TEXT = $SUCCESS +!$WARNING_LIGHT = "#E47833" +!$WARNING_TEXT = $WARNING +!$DANGER_LIGHT = "#D2494E" +!$DANGER_TEXT = $WHITE + +!procedure $success($msg) + $msg +!endprocedure + +!procedure $failure($msg) + $msg +!endprocedure + +!procedure $warning($msg) + $msg +!endprocedure + +!procedure $primary_scheme() + FontColor $PRIMARY_TEXT + BorderColor $PRIMARY + BackgroundColor $BGCOLOR +!endprocedure + +'' +'' Global Default Values +'' +skinparam defaultFontName "Verdana" +skinparam defaultFontSize 12 +skinparam dpi 100 +skinparam shadowing false +skinparam roundcorner 8 +skinparam ParticipantPadding 40 +skinparam BoxPadding 40 +skinparam Padding 5 +skinparam ArrowColor $GRAY +skinparam stereotype { + CBackgroundColor $SECONDARY_LIGHT + CBorderColor $SECONDARY_DARK + ABackgroundColor $SUCCESS_LIGHT + ABorderColor $SUCCESS_DARK + IBackgroundColor $DANGER_LIGHT + IBorderColor $DANGER_DARK + EBackgroundColor $WARNING_LIGHT + EBorderColor $WARNING_DARK + NBackgroundColor $INFO_LIGHT + NBorderColor $INFO_DARK +} +skinparam title { + FontColor $PRIMARY + BorderColor $SECONDARY_DARK + FontSize 20 + BorderRoundCorner 8 + BorderThickness 1 + BackgroundColor $BGCOLOR +} + +skinparam legend { + BackgroundColor $BGCOLOR + BorderColor $SECONDARY_DARK + FontColor $DARK +} + +!startsub swimlane +skinparam swimlane { + BorderColor $INFO + BorderThickness 2 + TitleBackgroundColor $SECONDARY_LIGHT-$SECONDARY + TitleFontColor $PRIMARY +} +!endsub + +!startsub activity + +skinparam activity { + $primary_scheme() + BarColor $SUCCESS + StartColor $INFO + EndColor $INFO + '' + DiamondBackgroundColor $BGCOLOR + DiamondBorderColor $SECONDARY_DARK + DiamondFontColor $SECONDARY_TEXT +} +!endsub + +!startsub participant + +skinparam participant { + $primary_scheme() + ParticipantBorderThickness 2 +} +!endsub + +!startsub actor + +skinparam actor { + $primary_scheme() +} +!endsub + +!startsub arrow + +skinparam arrow { + Thickness 3 + Color $PRIMARY + FontColor $FGCOLOR +} +!endsub + +!startsub sequence + +skinparam sequence { + BorderColor $PRIMARY + ' For some reason sequence title font color does not pick up from global + TitleFontColor $PRIMARY + BackgroundColor $BGCOLOR + StartColor $PRIMARY + EndColor $PRIMARY + '' + BoxBackgroundColor $BGCOLOR + BoxBorderColor $GRAY + BoxFontColor $DARK + '' + LifeLineBorderColor $SECONDARY_DARK + LifeLineBorderThickness 2 + LifeLineBackgroundColor $BGCOLOR + '' + GroupBorderColor $GRAY + GroupFontColor $DARK + GroupHeaderFontColor $INFO_TEXT + '' + DividerBackgroundColor $BGCOLOR + DividerBorderColor $GRAY + DividerBorderThickness 2 + DividerFontColor $DARK + '' + ReferenceBackgroundColor $BGCOLOR + ReferenceBorderColor $GRAY + ReferenceFontColor $DARK + ReferenceHeaderFontColor $INFO_TEXT +} +!endsub + +!startsub partition + +skinparam partition { + BorderColor $PRIMARY + FontColor $PRIMARY + BackgroundColor $BGCOLOR +} +!endsub + +!startsub collections + +skinparam collections { + $primary_scheme() +} +!endsub + +!startsub control + +skinparam control { + $primary_scheme() +} +!endsub + +!startsub entity + +skinparam entity { + $primary_scheme() +} +!endsub + +!startsub boundary + +skinparam boundary { + $primary_scheme() +} +!endsub + +!startsub agent + +skinparam agent { + BackgroundColor $BGCOLOR + BorderColor #999999 + FontColor #333333 +} +!endsub + +!startsub note + +skinparam note { + BorderThickness 1 + BackgroundColor $BGCOLOR + BorderColor $INFO + FontColor $INFO_TEXT +} +!endsub + +!startsub artifact + +skinparam artifact { + BackgroundColor $BGCOLOR + BorderColor $GRAY + FontColor $GRAY +} +!endsub + +!startsub component + +skinparam component { + $primary_scheme() + ' BackgroundColor $BGCOLOR + ' BorderColor $SUCCESS + ' FontColor $SUCCESS_TEXT +} +!endsub + +!startsub interface + +skinparam interface { + BackgroundColor $BGCOLOR + BorderColor $DANGER + FontColor $DARK +} +!endsub + +!startsub storage + +skinparam storage { + BackgroundColor $BGCOLOR + BorderColor $WARNING + FontColor $WARNING_TEXT +} +!endsub + +!startsub node + +skinparam node { + BackgroundColor $BGCOLOR + BorderColor $DARK + FontColor $DARK +} +!endsub + +!startsub cloud + +skinparam cloud { + BackgroundColor #F2FCFE-#eeeeee + BorderColor #F2FCFE + FontColor $DARK +} +!endsub + +!startsub database + +skinparam database { + $primary_scheme() +} +!endsub + +!startsub class + +skinparam class { + $primary_scheme() + FontColor $LIGHT + HeaderBackgroundColor $PRIMARY-$PRIMARY_DARK + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $DARK + AttributeFontSize 11 +} +!endsub + +!startsub object + +skinparam object { + $primary_scheme() + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $SECONDARY_DARK + AttributeFontSize 11 +} +!endsub + +!startsub usecase + +skinparam usecase { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub rectangle + +skinparam rectangle { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub package + +skinparam package { + BackgroundColor $BGCOLOR + BorderColor $PRIMARY + FontColor $PRIMARY + BorderThickness 2 +} +!endsub + +!startsub folder + +skinparam folder { + BackgroundColor $BGCOLOR + BorderColor $WARNING + FontColor $WARNING + BorderThickness 2 +} +!endsub + +!startsub frame + +skinparam frame { + BackgroundColor $BGCOLOR + BorderColor $INFO + FontColor $INFO_TEXT + BorderThickness 2 +} +!endsub + +!startsub state + +skinparam state { + $primary_scheme() + StartColor $INFO + EndColor $INFO + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub queue + +skinparam queue { + $primary_scheme() +} +!endsub + +!startsub card + +skinparam card { + BackgroundColor $BGCOLOR + BorderColor $INFO + FontColor $INFO_TEXT +} +!endsub + +!startsub file + +skinparam file { + BackgroundColor $BGCOLOR + BorderColor $GRAY + FontColor $GRAY +} +!endsub + +!startsub stack + +skinparam stack { + $primary_scheme() +} +!endsub + +!if (%variable_exists("LEGACY")) +!$LEGACY = "true" +!endif + +!if (%getenv("LEGACY") == "true") +!$LEGACY = "true" +!endif + +!if (%variable_exists("$LEGACY")) + +skinparam useBetaStyle true + +!startsub mindmap + + +!endsub +!endif diff --git a/themes/puml-theme-cerulean.puml b/themes/puml-theme-cerulean.puml new file mode 100644 index 000000000..24bfcc2e0 --- /dev/null +++ b/themes/puml-theme-cerulean.puml @@ -0,0 +1,442 @@ +'' +'' Cerulean theme based off of the bootstrap theme of the same name +'' https://bootswatch.com/cerulean/ +'' +'' Author: Brett Schwarz +'' Copyright (c) 2019 by Brett Schwarz + +!$THEME = "cerulean" + +!if %not(%variable_exists("$BGCOLOR")) +!$BGCOLOR = "transparent" +!endif + +skinparam backgroundColor $BGCOLOR +skinparam useBetaStyle false + +'' +'' Colors taken from the css file of the BS theme +'' +!$BLUE = "#033C73" +!$INDIGO = "#6610F2" +!$PURPLE = "#6F42C1" +!$PINK = "#E83E8C" +!$RED = "#C71C22" +!$ORANGE = "#FD7E14" +!$YELLOW = "#DD5600" +!$GREEN = "#73A839" +!$TEAL = "#20C997" +!$CYAN = "#2FA4E7" +!$WHITE = "#FFF" +!$GRAY_DARK = "#343A40" +!$GRAY = "#868E96" +!$PRIMARY = "#2FA4E7" +!$SECONDARY = "#E9ECEF" +!$SUCCESS = "#73A839" +!$INFO = "#033C73" +!$WARNING = "#DD5600" +!$DANGER = "#C71C22" +!$LIGHT = "#F8F9FA" +!$DARK = "#343A40" + +'' *_LIGHT = tint (lighter) of the main color of 80% +'' where TINT is calculated by clr + (255-clr) * tint_factor +'' *_DARK = shade (darker) of the main color of 80% +'' and SHADE is calculated by clr * (1 - shade_factor) +'' +!$FGCOLOR = $DARK +!$PRIMARY_LIGHT = "#59B6EC" +!$PRIMARY_DARK = "#2683B9" +!$PRIMARY_TEXT = $WHITE +!$SECONDARY_LIGHT = "#EDF0F2" +!$SECONDARY_DARK = "#BABDBF" +!$SECONDARY_TEXT = $DARK +!$INFO_LIGHT = "#35638F" +!$INFO_DARK = "#02305C" +!$INFO_TEXT = $WHITE +!$SUCCESS_LIGHT = "#8FB961" +!$SUCCESS_DARK = "#5C862E" +!$SUCCESS_TEXT = $WHITE +!$WARNING_LIGHT = "#E47833" +!$WARNING_DARK = "#B14500" +!$WARNING_TEXT = $WHITE +!$DANGER_LIGHT = "#D2494E" +!$DANGER_DARK = "#9F161B" +!$DANGER_TEXT = $WHITE + +!procedure $success($msg) + $msg +!endprocedure + +!procedure $failure($msg) + $msg +!endprocedure + +!procedure $warning($msg) + $msg +!endprocedure + +!procedure $primary_scheme() + FontColor $PRIMARY_TEXT + BorderColor $PRIMARY + BackgroundColor $PRIMARY_LIGHT-$PRIMARY +!endprocedure + +'' +'' Global Default Values +'' +skinparam defaultFontName "Verdana" +skinparam defaultFontSize 12 +skinparam dpi 100 +skinparam shadowing false +skinparam roundcorner 8 +skinparam ParticipantPadding 40 +skinparam BoxPadding 40 +skinparam Padding 5 +skinparam ArrowColor $GRAY +skinparam stereotype { + CBackgroundColor $SECONDARY_LIGHT + CBorderColor $SECONDARY_DARK + ABackgroundColor $SUCCESS_LIGHT + ABorderColor $SUCCESS_DARK + IBackgroundColor $DANGER_LIGHT + IBorderColor $DANGER_DARK + EBackgroundColor $WARNING_LIGHT + EBorderColor $WARNING_DARK + NBackgroundColor $INFO_LIGHT + NBorderColor $INFO_DARK +} +skinparam title { + FontColor $PRIMARY + BorderColor $SECONDARY_DARK + FontSize 20 + BorderRoundCorner 8 + BorderThickness 1 + BackgroundColor $SECONDARY_LIGHT-$SECONDARY +} + + +skinparam legend { + BackgroundColor $SECONDARY + BorderColor $SECONDARY_DARK + FontColor $DARK +} + +!startsub swimlane +skinparam swimlane { + BorderColor $INFO + BorderThickness 2 + TitleBackgroundColor $SECONDARY_LIGHT-$SECONDARY + TitleFontColor $PRIMARY +} +!endsub + +!startsub activity + +skinparam activity { + $primary_scheme() + BarColor $SUCCESS + StartColor $INFO + EndColor $INFO + '' + DiamondBackgroundColor $WHITE-$SECONDARY_LIGHT + DiamondBorderColor $SECONDARY_DARK + DiamondFontColor $SECONDARY_TEXT +} +!endsub + +!startsub participant + +skinparam participant { + $primary_scheme() + ParticipantBorderThickness 2 +} +!endsub + +!startsub actor + +skinparam actor { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub arrow + +skinparam arrow { + Thickness 3 + Color $PRIMARY + FontColor $FGCOLOR +} +!endsub + +!startsub sequence + +skinparam sequence { + BorderColor $PRIMARY + ' For some reason sequence title font color does not pick up from global + TitleFontColor $PRIMARY + BackgroundColor $BGCOLOR + StartColor $PRIMARY + EndColor $PRIMARY + '' + BoxBackgroundColor $LIGHT + BoxBorderColor $GRAY + BoxFontColor $DARK + '' + LifeLineBorderColor $SECONDARY_DARK + LifeLineBorderThickness 2 + LifeLineBackgroundColor $SECONDARY_LIGHT + '' + GroupBorderColor $GRAY + GroupFontColor $DARK + GroupHeaderFontColor $INFO + '' + DividerBackgroundColor $WHITE-$LIGHT + DividerBorderColor $GRAY + DividerBorderThickness 2 + DividerFontColor $DARK + '' + ReferenceBackgroundColor $BGCOLOR + ReferenceBorderColor $GRAY + ReferenceFontColor $DARK + ReferenceHeaderFontColor $INFO +} +!endsub + +!startsub partition + +skinparam partition { + BorderColor $PRIMARY + FontColor $PRIMARY + BackgroundColor $BGCOLOR +} +!endsub + +!startsub collections + +skinparam collections { + $primary_scheme() +} +!endsub + +!startsub control + +skinparam control { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub entity + +skinparam entity { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub boundary + +skinparam boundary { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub agent + +skinparam agent { + BackgroundColor #orange + BorderColor #999999 + FontColor #333333 +} +!endsub + +!startsub note + +skinparam note { + BorderThickness 1 + BackgroundColor $INFO_LIGHT-$INFO + BorderColor $INFO + FontColor $WHITE +} +!endsub + +!startsub artifact + +skinparam artifact { + BackgroundColor $WHITE-$LIGHT + BorderColor $SECONDARY_DARK + FontColor $SECONDARY_TEXT +} +!endsub + +!startsub component + +skinparam component { + $primary_scheme() +} +!endsub + +!startsub interface + +skinparam interface { + BackgroundColor $DANGER_LIGHT + BorderColor $DANGER + FontColor $DARK +} +!endsub + +!startsub storage + +skinparam storage { + BackgroundColor $WARNING_LIGHT-$WARNING + BorderColor $WARNING + FontColor $WARNING_TEXT +} +!endsub + +!startsub node + +skinparam node { + BackgroundColor $SECONDARY_LIGHT-$SECONDARY + BorderColor $SECONDARY + FontColor $SECONDARY_TEXT +} +!endsub + +!startsub cloud + +skinparam cloud { + BackgroundColor #F2FCFE-#eeeeee + BorderColor #F2FCFE + FontColor $PRIMARY +} +!endsub + +!startsub database + +skinparam database { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub class + +skinparam class { + $primary_scheme() + HeaderBackgroundColor $PRIMARY-$PRIMARY_DARK + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $LIGHT + AttributeFontSize 11 +} +!endsub + +!startsub object + +skinparam object { + $primary_scheme() + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub usecase + +skinparam usecase { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub rectangle + +skinparam rectangle { + FontColor $PRIMARY + BorderColor $PRIMARY_LIGHT + BackgroundColor $BGCOLOR + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub package + +skinparam package { + FontColor $PRIMARY + BorderColor $PRIMARY_LIGHT + BackgroundColor $BGCOLOR + BorderThickness 2 +} +!endsub + +!startsub folder + +skinparam folder { + BackgroundColor $WHITE-$SECONDARY_LIGHT + BorderColor $WARNING + FontColor $WARNING + BorderThickness 2 +} +!endsub + +!startsub frame + +skinparam frame { + BackgroundColor $WHITE-$SECONDARY_LIGHT + BorderColor $INFO + FontColor $INFO + BorderThickness 2 +} +!endsub + +!startsub state + +skinparam state { + $primary_scheme() + BorderColor $PRIMARY_DARK + StartColor $INFO + EndColor $INFO + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub queue + +skinparam queue { + $primary_scheme() +} +!endsub + +!startsub card + +skinparam card { + BackgroundColor $INFO_LIGHT-$INFO + BorderColor $INFO + FontColor $INFO_TEXT +} +!endsub + +!startsub file + +skinparam file { + BackgroundColor $SECONDARY_LIGHT-$SECONDARY + BorderColor $INFO + FontColor $GRAY + +} +!endsub + +!startsub stack + +skinparam stack { + $primary_scheme() +} +!endsub diff --git a/themes/puml-theme-cyborg-outline.puml b/themes/puml-theme-cyborg-outline.puml new file mode 100644 index 000000000..410d7e415 --- /dev/null +++ b/themes/puml-theme-cyborg-outline.puml @@ -0,0 +1,446 @@ +'' +'' Cyborg theme based off of the bootstrap theme of the same name, with outline colors +'' https://bootswatch.com/cyborg/ +'' +'' Author: Brett Schwarz +'' Copyright (c) 2019 by Brett Schwarz + +!$THEME = "cyborg-outline" + +!if %not(%variable_exists("$BGCOLOR")) +!$BGCOLOR = "transparent" +!endif + +skinparam backgroundColor $BGCOLOR +skinparam useBetaStyle false + +'' +'' Colors taken from the css file of the BS theme +'' +!$BLUE = "#2A9FD6" +!$INDIGO = "#6610f2" +!$PURPLE = "#6f42c1" +!$PINK = "#e83e8c" +!$RED = "#CC0000" +!$ORANGE = "#fd7e14" +!$YELLOW = "#FF8800" +!$GREEN = "#77B300" +!$TEAL = "#20c997" +!$CYAN = "#9933CC" +!$WHITE = "#FFF" +!$GRAY_LIGHT = "#222" +!$GRAY = "#555" +!$PRIMARY = "#2A9FD6" +!$SECONDARY = "#555" +!$SUCCESS = "#77B300" +!$INFO = "#9933CC" +!$WARNING = "#FF8800" +!$DANGER = "#CC0000" +!$LIGHT = "#222" +!$DARK = "#ADAFAE" + +'' *_DARK = tint (lighter) of the main color of 80% +'' where TINT is calculated by clr + (255-clr) * tint_factor +'' *_LIGHT = shade (darker) of the main color of 80% +'' and SHADE is calculated by clr * (1 - shade_factor) +'' +!$FGCOLOR = $WHITE +!$PRIMARY_DARK = "#55B2DE" +!$PRIMARY_LIGHT = "#227FAB" +!$PRIMARY_TEXT = $PRIMARY +!$SECONDARY_DARK = "#777777" +!$SECONDARY_LIGHT = "#444444" +!$SECONDARY_TEXT = $SECONDARY_DARK +!$INFO_DARK = "#AD5CD6" +!$INFO_LIGHT = "#7a29a3" +!$INFO_TEXT = $INFO +!$SUCCESS_DARK = "#92C233" +!$SUCCESS_LIGHT = "#5F8F00" +!$SUCCESS_TEXT = $SUCCESS +!$WARNING_DARK = "#FFA033" +!$WARNING_LIGHT = "#cc6d00" +!$WARNING_TEXT = $WARNING +!$DANGER_DARK = "#D63333" +!$DANGER_LIGHT = "#a30000" +!$DANGER_TEXT = $WHITE +!$DARK_DARK = "#BDBFBE" +!$DARK_LIGHT = "#8A8C8B" +!$LIGHT_DARK = "#4E4E4E" +!$LIGHT_LIGHT = "#1B1B1B" + +!procedure $success($msg) + $msg +!endprocedure + +!procedure $failure($msg) + $msg +!endprocedure + +!procedure $warning($msg) + $msg +!endprocedure + +!procedure $primary_scheme() + FontColor $PRIMARY_TEXT + BorderColor $PRIMARY_DARK + BackgroundColor $BGCOLOR +!endprocedure + +'' +'' Global Default Values +'' +skinparam defaultFontName "Verdana" +skinparam defaultFontSize 12 +skinparam dpi 100 +skinparam shadowing false +skinparam roundcorner 8 +skinparam ParticipantPadding 40 +skinparam BoxPadding 40 +skinparam Padding 5 +skinparam ArrowColor $DARK +skinparam stereotype { + CBackgroundColor $SECONDARY_DARK + CBorderColor $SECONDARY_LIGHT + ABackgroundColor $SUCCESS_LIGHT + ABorderColor $SUCCESS_DARK + IBackgroundColor $DANGER_LIGHT + IBorderColor $DANGER_DARK + EBackgroundColor $WARNING_LIGHT + EBorderColor $WARNING_DARK + NBackgroundColor $INFO_LIGHT + NBorderColor $INFO_DARK +} +skinparam title { + FontColor $PRIMARY + BorderColor $SECONDARY_DARK + FontSize 20 + BorderRoundCorner 8 + BorderThickness 1 + BackgroundColor $BGCOLOR +} + +skinparam legend { + BackgroundColor $BGCOLOR + BorderColor $SECONDARY_DARK + FontColor $DARK +} + +!startsub swimlane +skinparam swimlane { + BorderColor $INFO + BorderThickness 2 + TitleBackgroundColor $SECONDARY_LIGHT-$SECONDARY + TitleFontColor $PRIMARY +} +!endsub + +!startsub activity + +skinparam activity { + $primary_scheme() + BarColor $SUCCESS + StartColor $INFO + EndColor $INFO + '' + DiamondBackgroundColor $BGCOLOR + DiamondBorderColor $SECONDARY_DARK + DiamondFontColor $SECONDARY_TEXT +} +!endsub + +!startsub participant + +skinparam participant { + $primary_scheme() + ParticipantBorderThickness 2 +} +!endsub + +!startsub actor + +skinparam actor { + $primary_scheme() + FontColor $PRIMARY +} +!endsub + +!startsub arrow + +skinparam arrow { + Thickness 3 + Color $PRIMARY + FontColor $FGCOLOR +} +!endsub + +!startsub sequence + +skinparam sequence { + BorderColor $PRIMARY + ' For some reason sequence title font color does not pick up from global + TitleFontColor $PRIMARY + BackgroundColor $BGCOLOR + StartColor $PRIMARY + EndColor $PRIMARY + '' + BoxBackgroundColor $BGCOLOR + BoxBorderColor $DARK + BoxFontColor $DARk + '' + LifeLineBorderColor $SECONDARY + LifeLineBorderThickness 2 + LifeLineBackgroundColor $BGCOLOR + '' + GroupBorderColor $DARK + GroupFontColor $DARK + GroupHeaderFontColor $INFO_TEXT + GroupBackgroundColor $BGCOLOR + GroupHeaderBackgroundColor $BGCOLOR + '' + DividerBackgroundColor $BGCOLOR + DividerBorderColor $DARK + DividerBorderThickness 2 + DividerFontColor $DARK + '' + ReferenceBackgroundColor $BGCOLOR + ReferenceBorderColor $DARK + ReferenceFontColor $DARK + ReferenceHeaderFontColor $INFO_TEXT + ReferenceHeaderBackgroundColor $BGCOLOR +} +!endsub + +!startsub partition + +skinparam partition { + BorderColor $PRIMARY + FontColor $PRIMARY + BackgroundColor $BGCOLOR +} +!endsub + +!startsub collections + +skinparam collections { + $primary_scheme() +} +!endsub + +!startsub control + +skinparam control { + $primary_scheme() + FontColor $PRIMARY +} +!endsub + +!startsub entity + +skinparam entity { + $primary_scheme() + FontColor $PRIMARY +} +!endsub + +!startsub boundary + +skinparam boundary { + $primary_scheme() + FontColor $PRIMARY +} +!endsub + +!startsub agent + +skinparam agent { + BackgroundColor $BGCOLOR + BorderColor $WARNING_LIGHT + FontColor $DARK +} +!endsub + +!startsub note + +skinparam note { + BorderThickness 1 + BackgroundColor $BGCOLOR + BorderColor $INFO_DARK + FontColor $INFO_DARK +} +!endsub + +!startsub artifact + +skinparam artifact { + BackgroundColor $BGCOLOR + BorderColor $DARK_DARK + FontColor $DARK_DARK +} +!endsub + +!startsub component + +skinparam component { + $primary_scheme() +} +!endsub + +!startsub interface + +skinparam interface { + BackgroundColor $BGCOLOR + BorderColor $DANGER + FontColor $DARK +} +!endsub + +!startsub storage + +skinparam storage { + BackgroundColor $BGCOLOR + BorderColor $WARNING_DARK + FontColor $WARNING_TEXT +} +!endsub + +!startsub node + +skinparam node { + BackgroundColor $BGCOLOR + BorderColor $DARK + FontColor $DARK +} +!endsub + +!startsub cloud + +skinparam cloud { + BackgroundColor $BGCOLOR + BorderColor #F2FCFE + FontColor $DARK +} +!endsub + +!startsub database + +skinparam database { + $primary_scheme() + FontColor $PRIMARY +} +!endsub + + +!startsub class + +skinparam class { + $primary_scheme() + FontColor $LIGHT + HeaderBackgroundColor $PRIMARY_LIGHT + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $DARK + AttributeFontSize 11 +} +!endsub + +!startsub object + +skinparam object { + $primary_scheme() + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $SECONDARY_DARK + AttributeFontSize 11 +} +!endsub + +!startsub usecase + +skinparam usecase { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub rectangle + +skinparam rectangle { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub package + +skinparam package { + BackgroundColor $BGCOLOR + BorderColor $PRIMARY + FontColor $PRIMARY + BorderThickness 2 +} +!endsub + +!startsub folder + +skinparam folder { + BackgroundColor $BGCOLOR + BorderColor $WARNING + FontColor $WARNING + BorderThickness 2 +} +!endsub + +!startsub frame + +skinparam frame { + BackgroundColor $BGCOLOR + BorderColor $INFO + FontColor $INFO_TEXT + BorderThickness 2 +} +!endsub + +!startsub state + +skinparam state { + $primary_scheme() + StartColor $INFO + EndColor $INFO + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub queue + +skinparam queue { + $primary_scheme() +} +!endsub + +!startsub card + +skinparam card { + BackgroundColor $BGCOLOR + BorderColor $INFO + FontColor $INFO_TEXT +} +!endsub + +!startsub file + +skinparam file { + BackgroundColor $BGCOLOR + BorderColor $GRAY + FontColor $GRAY +} +!endsub + +!startsub stack + +skinparam stack { + $primary_scheme() +} +!endsub diff --git a/themes/puml-theme-cyborg.puml b/themes/puml-theme-cyborg.puml new file mode 100644 index 000000000..c6fe93535 --- /dev/null +++ b/themes/puml-theme-cyborg.puml @@ -0,0 +1,452 @@ +'' +'' Cyborg theme based off of the bootstrap theme of the same name +'' https://bootswatch.com/cyborg/ +'' +'' Author: Brett Schwarz +'' Copyright (c) 2019 by Brett Schwarz + +!$THEME = "cyborg" + +!if %not(%variable_exists("$BGCOLOR")) +!$BGCOLOR = "transparent" +!endif + +skinparam backgroundColor $BGCOLOR +skinparam useBetaStyle false + +'' +'' Colors taken from the css file of the BS theme +'' +!$BLUE = "#2A9FD6" +!$INDIGO = "#6610f2" +!$PURPLE = "#6f42c1" +!$PINK = "#e83e8c" +!$RED = "#CC0000" +!$ORANGE = "#fd7e14" +!$YELLOW = "#FF8800" +!$GREEN = "#77B300" +!$TEAL = "#20c997" +!$CYAN = "#9933CC" +!$WHITE = "#FFF" +!$GRAY_LIGHT = "#222" +!$GRAY = "#555" +!$PRIMARY = "#2A9FD6" +!$SECONDARY = "#555" +!$SUCCESS = "#77B300" +!$INFO = "#9933CC" +!$WARNING = "#FF8800" +!$DANGER = "#CC0000" +!$LIGHT = "#222" +!$DARK = "#ADAFAE" + +'' *_DARK = tint (lighter) of the main color of 80% +'' where TINT is calculated by clr + (255-clr) * tint_factor +'' *_LIGHT = shade (darker) of the main color of 80% +'' and SHADE is calculated by clr * (1 - shade_factor) +'' +!$FGCOLOR = $WHITE +!$PRIMARY_DARK = "#55B2DE" +!$PRIMARY_LIGHT = "#227FAB" +!$PRIMARY_TEXT = $WHITE +!$SECONDARY_DARK = "#777777" +!$SECONDARY_LIGHT = "#444444" +!$SECONDARY_TEXT = $WHITE +!$INFO_DARK = "#AD5CD6" +!$INFO_LIGHT = "#9F161B" +!$INFO_TEXT = $WHITE +!$SUCCESS_DARK = "#92C233" +!$SUCCESS_LIGHT = "#5F8F00" +!$SUCCESS_TEXT = $WHITE +!$WARNING_DARK = "#FFA033" +!$WARNING_LIGHT = "#CC6D00" +!$WARNING_TEXT = $WHITE +!$DANGER_DARK = "#D63333" +!$DANGER_LIGHT = "#A30000" +!$DANGER_TEXT = $WHITE +!$DARK_DARK = "#BDBFBE" +!$DARK_LIGHT = "#8A8C8B" +!$LIGHT_DARK = "#4E4E4E" +!$LIGHT_LIGHT = "#1B1B1B" + +!procedure $success($msg) + $msg +!endprocedure + +!procedure $failure($msg) + $msg +!endprocedure + +!procedure $warning($msg) + $msg +!endprocedure + +!procedure $primary_scheme() + FontColor $PRIMARY_TEXT + BorderColor $PRIMARY_DARK + BackgroundColor $PRIMARY +!endprocedure + +'' +'' Global Default Values +'' +skinparam defaultFontName "Verdana" +skinparam defaultFontSize 12 +skinparam dpi 100 +skinparam shadowing false +skinparam roundcorner 8 +skinparam ParticipantPadding 40 +skinparam BoxPadding 40 +skinparam Padding 5 +skinparam ArrowColor $DARK +skinparam stereotype { + CBackgroundColor $SECONDARY_DARK + CBorderColor $SECONDARY_LIGHT + ABackgroundColor $SUCCESS_LIGHT + ABorderColor $SUCCESS_DARK + IBackgroundColor $DANGER_LIGHT + IBorderColor $DANGER_DARK + EBackgroundColor $WARNING_LIGHT + EBorderColor $WARNING_DARK + NBackgroundColor $INFO_LIGHT + NBorderColor $INFO_DARK +} +skinparam title { + FontColor $PRIMARY + BorderColor $SECONDARY_DARK + FontSize 20 + BorderRoundCorner 8 + BorderThickness 1 + BackgroundColor $SECONDARY_LIGHT-$SECONDARY +} + + +skinparam legend { + BackgroundColor $SECONDARY + BorderColor $SECONDARY_DARK + FontColor $DARK +} + +!startsub swimlane +skinparam swimlane { + BorderColor $INFO + BorderThickness 2 + TitleBackgroundColor $SECONDARY_LIGHT-$SECONDARY + TitleFontColor $PRIMARY +} +!endsub + +!startsub activity + +skinparam activity { + $primary_scheme() + BarColor $SUCCESS + StartColor $INFO + EndColor $INFO + '' + DiamondBackgroundColor $SECONDARY_LIGHT + DiamondBorderColor $SECONDARY_DARK + DiamondFontColor $SECONDARY_TEXT +} +!endsub + +!startsub participant + +skinparam participant { + $primary_scheme() + ParticipantBorderThickness 2 +} +!endsub + +!startsub actor + +skinparam actor { + $primary_scheme() + FontColor $PRIMARY +} +!endsub + +!startsub arrow + +skinparam arrow { + Thickness 3 + Color $PRIMARY + FontColor $FGCOLOR +} +!endsub + +!startsub sequence + +skinparam sequence { + BorderColor $PRIMARY + ' For some reason sequence title font color does not pick up from global + TitleFontColor $PRIMARY + BackgroundColor $BGCOLOR + StartColor $PRIMARY + EndColor $PRIMARY + '' + BoxBackgroundColor $BGCOLOR + BoxBorderColor $DARK + BoxFontColor $DARk + '' + LifeLineBorderColor $SECONDARY + LifeLineBorderThickness 2 + LifeLineBackgroundColor $SECONDARY_DARK + '' + GroupBorderColor $SECONDARY + GroupFontColor $DARK + GroupHeaderFontColor $INFO + GroupBackgroundColor $SECONDARY + GroupHeaderBackgroundColor $BGCOLOR + '' + DividerBackgroundColor $DARK + DividerBorderColor $DARK + DividerBorderThickness 2 + DividerFontColor $LIGHT + '' + ReferenceBackgroundColor $BGCOLOR + ReferenceBorderColor $SECONDARY + ReferenceFontColor $SECONDARY_TEXT + ReferenceHeaderBackgroundColor $SECONDARY +} +!endsub + +!startsub partition + +skinparam partition { + BorderColor $PRIMARY + FontColor $PRIMARY + BackgroundColor $BGCOLOR +} +!endsub + +!startsub collections + +skinparam collections { + $primary_scheme() +} +!endsub + +!startsub control + +skinparam control { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub entity + +skinparam entity { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub boundary + +skinparam boundary { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub agent + +skinparam agent { + BackgroundColor $WARNING + BorderColor $WARNING_LIGHT + FontColor $DARK +} +!endsub + +!startsub note + +skinparam note { + BorderThickness 1 + BackgroundColor $INFO + BorderColor $INFO_DARK + FontColor $WHITE +} +!endsub + +!startsub artifact + +skinparam artifact { + BackgroundColor $DARK + BorderColor $DARK_DARK + FontColor $LIGHT +} +!endsub + +!startsub component + +skinparam component { + $primary_scheme() +} +!endsub + +!startsub interface + +skinparam interface { + BackgroundColor $DANGER_DARK + BorderColor $DANGER + FontColor $DARK +} +!endsub + +!startsub storage + +skinparam storage { + BackgroundColor $WARNING + BorderColor $WARNING_DARK + FontColor $WARNING_TEXT +} +!endsub + +!startsub node + +skinparam node { + BackgroundColor $SECONDARY + BorderColor $DARK + FontColor $DARK +} +!endsub + +!startsub cloud + +skinparam cloud { + BackgroundColor $LIGHT-black + BorderColor $LIGHT + FontColor $DARK +} +!endsub + +!startsub database + +skinparam database { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub actor + +skinparam actor { + FontColor $DARK +} +!endsub + +!startsub class + +skinparam class { + $primary_scheme() + HeaderBackgroundColor $PRIMARY_LIGHT + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $LIGHT + AttributeFontSize 11 +} +!endsub + +!startsub object + +skinparam object { + $primary_scheme() + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub usecase + +skinparam usecase { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub rectangle + +skinparam rectangle { + $primary_scheme() + BackgroundColor $SECONDARY_LIGHT + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub package + +skinparam package { + BackgroundColor $SECONDARY + BorderColor $PRIMARY + FontColor $PRIMARY + BorderThickness 2 +} +!endsub + +!startsub folder + +skinparam folder { + BackgroundColor $SECONDARY_LIGHT + BorderColor $WARNING + FontColor $WARNING + BorderThickness 2 +} +!endsub + +!startsub frame + +skinparam frame { + BackgroundColor $SECONDARY_LIGHT + BorderColor $INFO + FontColor $INFO + BorderThickness 2 +} +!endsub + +!startsub state + +skinparam state { + $primary_scheme() + StartColor $INFO + EndColor $INFO + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub queue + +skinparam queue { + $primary_scheme() +} +!endsub + +!startsub card + +skinparam card { + BackgroundColor $INFO + BorderColor $INFO_DARK + FontColor $INFO_TEXT +} +!endsub + +!startsub file + +skinparam file { + BackgroundColor $SECONDARY_DARK + BorderColor $DARK + FontColor $DARK +} +!endsub + +!startsub stack + +skinparam stack { + $primary_scheme() +} +!endsub diff --git a/themes/puml-theme-hacker.puml b/themes/puml-theme-hacker.puml new file mode 100644 index 000000000..585e910ee --- /dev/null +++ b/themes/puml-theme-hacker.puml @@ -0,0 +1,479 @@ +'' +'' hacker theme based off of the Jekyll theme of the same name +'' https://github.com/pages-themes/hacker +'' +'' Author: Brett Schwarz +'' Copyright (c) 2019 by Brett Schwarz + +!$THEME = "hacker" + +!if %not(%variable_exists("$BGCOLOR")) +!$BGCOLOR = "transparent" +!endif + +skinparam BackgroundColor $BGCOLOR +skinparam useBetaStyle false + +'' +'' Colors taken from the _default_colors.scss file for jekyll hacker theme +'' +!$PRIMARY = "#b5e853" +!$PRIMARY_LIGHT = "#d3f198" +!$PRIMARY_DARK = "#6d8b32" +!$PRIMARY_TEXT = "#151515" +!$SECONDARY = "#6a9fb5" +!$SECONDARY_LIGHT = "#88b2c4" +!$SECONDARY_DARK = "#557f91" +!$SECONDARY_TEXT = "#fefefe" +!$SUCCESS = "#90a959" +!$SUCCESS_LIGHT = "#a6ba7a" +!$INFO = "#aa759f" +!$INFO_LIGHT = "#bb91b2" +!$INFO_DARK = "#885E7F" +!$WARNING = "#f4bf75" +!$WARNING_LIGHT = "#f6cc91" +!$WARNING_TEXT = "#151515" +!$DANGER = "#ac4142" +!$DANGER_LIGHT = "#bd6768" +!$LIGHT = "#151515" +!$DARK = "#eaeaea" + +!procedure $success($msg) + $msg +!endprocedure + +!procedure $failure($msg) + $msg +!endprocedure + +!procedure $warning($msg) + $msg +!endprocedure + +!procedure $primary_scheme() + FontColor $PRIMARY_TEXT + BorderColor $PRIMARY_LIGHT + BackgroundColor $PRIMARY_LIGHT-$PRIMARY +!endprocedure + + +'' +'' Global Default Values +'' +skinparam defaultFontName "Verdana" +skinparam defaultFontSize 12 +skinparam dpi 100 +skinparam shadowing false +skinparam roundcorner 40 +skinparam ParticipantPadding 40 +skinparam BoxPadding 40 +skinparam Padding 5 +skinparam ArrowColor $DARK +skinparam stereotype { + CBackgroundColor $SECONDARY_DARK + CBorderColor $SECONDARY_LIGHT + ABackgroundColor $SUCCESS_LIGHT + ABorderColor $SUCCESS_DARK + IBackgroundColor $DANGER_LIGHT + IBorderColor $DANGER_DARK + EBackgroundColor $WARNING_LIGHT + EBorderColor $WARNING_DARK + NBackgroundColor $INFO_LIGHT + NBorderColor $INFO_DARK +} +skinparam title { + FontColor $PRIMARY + BorderColor $PRIMARY + FontSize 20 + BorderRoundCorner 8 + BorderThickness 1 + BackgroundColor $LIGHT-black +} + + +skinparam legend { + BackgroundColor $SECONDARY + BorderColor $SECONDARY_DARK + FontColor $DARK +} + +!startsub swimlane +skinparam swimlane { + BorderColor $INFO + BorderThickness 2 + TitleBackgroundColor $SECONDARY_LIGHT-$SECONDARY + TitleFontColor $PRIMARY +} +!endsub + +!startsub activity + +skinparam activity { + $primary_scheme() + BarColor $SUCCESS + StartColor $INFO + EndColor $INFO + '' + DiamondBackgroundColor $SECONDARY_LIGHT-$SECONDARY + DiamondBorderColor $SECONDARY_LIGHT + DiamondFontColor $SECONDARY_TEXT +} +!endsub + +!startsub participant + +skinparam participant { + $primary_scheme() + BorderThickness 2 +} +!endsub + +!startsub actor + +skinparam actor { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub arrow + +skinparam arrow { + Thickness 3 + Color $PRIMARY + FontColor $FGCOLOR +} +!endsub + +!startsub sequence + +skinparam sequence { + BorderColor $PRIMARY + ' For some reason sequence title font color does not pick up from global + TitleFontColor $PRIMARY + BackgroundColor $BGCOLOR + StartColor $PRIMARY + EndColor $PRIMARY + '' + BoxBackgroundColor $BGCOLOR + BoxBorderColor $DARK + BoxFontColor $DARk + '' + LifeLineBorderColor $SECONDARY + LifeLineBorderThickness 2 + LifeLineBackgroundColor $SECONDARY_DARK + '' + GroupBackgroundColor $LIGHT + GroupBorderColor $DARK + GroupFontColor $DARK + GroupHeaderFontColor $INFO + GroupHeaderBackgroundColor $BGCOLOR + '' + DividerBackgroundColor $DARK + DividerBorderColor $DARK + DividerBorderThickness 2 + DividerFontColor $LIGHT + '' + ReferenceBackgroundColor $BGCOLOR + ReferenceBorderColor $DARK + ReferenceFontColor $DARK + ReferenceHeaderBackgroundColor $LIGHT +} +!endsub + +!startsub partition + +skinparam partition { + BorderColor $PRIMARY + FontColor $PRIMARY + BackgroundColor $LIGHT-black +} +!endsub + +!startsub collections + +skinparam collections { + $primary_scheme() +} +!endsub + +!startsub control + +skinparam control { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub entity + +skinparam entity { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub boundary + +skinparam boundary { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub agent + +skinparam agent { + BackgroundColor $WARNING_LIGHT-$WARNING + BorderColor $WARNING_LIGHT + FontColor $DARK +} +!endsub + +!startsub note + +skinparam note { + BorderThickness 1 + BackgroundColor $INFO_LIGHT-$INFO_DARK + BorderColor $INFO_DARK + FontColor $WHITE +} +!endsub + +!startsub artifact + +skinparam artifact { + BackgroundColor $DARK + BorderColor white + FontColor $LIGHT +} +!endsub + +!startsub component + +skinparam component { + $primary_scheme() +} +!endsub + +!startsub interface + +skinparam interface { + BackgroundColor $DANGER_LIGHT-$DANGER + BorderColor $DANGER_LIGHT + FontColor $DARK +} +!endsub + +!startsub storage + +skinparam storage { + BackgroundColor $WARNING_LIGHT-$WARNING + BorderColor $WARNING_LIGHT + FontColor $WARNING_TEXT +} +!endsub + +!startsub node + +skinparam node { + BackgroundColor $LIGHT-black + BorderColor $PRIMARY_LIGHT + FontColor $DARK +} +!endsub + +!startsub cloud + +skinparam cloud { + BackgroundColor $BGCOLOR + BorderColor $DARK + FontColor $DARK +} +!endsub + +!startsub database + +skinparam database { + BackgroundColor $LIGHT-black + BorderColor $PRIMARY_LIGHT + FontColor $DARK +} +!endsub + +!startsub class + +skinparam class { + $primary_scheme() + HeaderBackgroundColor $PRIMARY_LIGHT-$PRIMARY + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $LIGHT + AttributeFontSize 11 +} +!endsub + +!startsub object + +skinparam object { + $primary_scheme() + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $LIGHT + AttributeFontSize 11 +} +!endsub + +!startsub usecase + +skinparam usecase { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub rectangle + +skinparam rectangle { + BackgroundColor $BGCOLOR + BorderColor $PRIMARY + BorderThickness 2 + FontColor $PRIMARY_DARK + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub package + +skinparam package { + BackgroundColor $LIGHT + BorderColor $PRIMARY + FontColor $PRIMARY + BorderThickness 2 +} +!endsub + +!startsub folder + +skinparam folder { + BackgroundColor $LIGHT-black + BorderColor $WARNING + FontColor $WARNING + BorderThickness 2 +} +!endsub + +!startsub frame + +skinparam frame { + BackgroundColor $LIGHT-black + BorderColor $INFO + FontColor $INFO + BorderThickness 2 +} +!endsub + +!startsub state + +skinparam state { + $primary_scheme() + StartColor $INFO + EndColor $INFO + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub queue + +skinparam queue { + $primary_scheme() +} +!endsub + +!startsub card + +skinparam card { + BackgroundColor $INFO_LIGHT-$INFO + BorderColor $INFO_LIGHT + FontColor $INFO_TEXT +} +!endsub + +!startsub file + +skinparam file { + BackgroundColor $SECONDARY_LIGHT-$SECONDARY + BorderColor $SECONDARY_LIGHT + FontColor $DARK +} +!endsub + +!startsub stack + +skinparam stack { + $primary_scheme() +} +!endsub + +!if %variable_exists("NEWSTYLE") + + + +!endif + diff --git a/themes/puml-theme-hacker.puml-hold b/themes/puml-theme-hacker.puml-hold new file mode 100644 index 000000000..6c6c03f15 --- /dev/null +++ b/themes/puml-theme-hacker.puml-hold @@ -0,0 +1,36 @@ + +skinparam { +defaultTextAlignment center +shadowing false +RoundCorner 10 +TitleFontSize 18 +TitleFontColor #eaeaea +BackgroundColor transparent +} + \ No newline at end of file diff --git a/themes/puml-theme-lightgray.puml b/themes/puml-theme-lightgray.puml new file mode 100644 index 000000000..14c29390d --- /dev/null +++ b/themes/puml-theme-lightgray.puml @@ -0,0 +1,423 @@ +'' +'' lightgray theme - mostly grays +'' +'' Author: Brett Schwarz +'' Copyright (c) 2019 by Brett Schwarz + +!$THEME = "lightgray" + +!if %not(%variable_exists("$BGCOLOR")) +!$BGCOLOR = "transparent" +!endif + +skinparam backgroundColor $BGCOLOR +skinparam useBetaStyle false + +!$WHITE = "#FFF" +!$GRAY_DARK = "#4d4d4d" +!$GRAY = "#737373" +!$LIGHT = "#fcfcfc" +!$DARK = "#303030" + +'' *_LIGHT = tint (lighter) of the main color of 80% +'' where TINT is calculated by clr + (255-clr) * tint_factor +'' *_DARK = shade (darker) of the main color of 80% +'' and SHADE is calculated by clr * (1 - shade_factor) +'' +!$FGCOLOR = $DARK +!$PRIMARY = "#e2e2e2" +!$PRIMARY_LIGHT = "#f3f3f3" +!$PRIMARY_DARK = "#888888" +!$PRIMARY_TEXT = "#336699" +!$SECONDARY = "#d2d2d2" +!$SECONDARY_LIGHT = "#dbdbdb" +!$SECONDARY_DARK = "#a8a8a8" +!$SECONDARY_TEXT = "white" +!$INFO = "#336699" +!$INFO_LIGHT = "#5c85ad" +!$INFO_DARK = "#29527a" +!$INFO_TEXT = $WHITE +!$SUCCESS = "#339933" +!$SUCCESS_LIGHT = "#5cad5c" +!$SUCCESS_DARK = "#297a29" +!$SUCCESS_TEXT = $WHITE +!$WARNING = "#ffae42" +!$WARNING_LIGHT = "#ffbe68" +!$WARNING_DARK = "#cc8b35" +!$WARNING_TEXT = $WHITE +!$DANGER = "#ff3333" +!$DANGER_LIGHT = "#ff5c5c" +!$DANGER_DARK = "#cc2929" +!$DANGER_TEXT = $WHITE + +!procedure $success($msg) + $msg +!endprocedure + +!procedure $failure($msg) + $msg +!endprocedure + +!procedure $warning($msg) + $msg +!endprocedure + +!procedure $primary_scheme() + FontColor $PRIMARY_TEXT + BorderColor $PRIMARY_LIGHT + BackgroundColor $PRIMARY_LIGHT-$PRIMARY +!endprocedure + +'' +'' Global Default Values +'' +skinparam defaultFontName "Verdana" +skinparam defaultFontSize 12 +skinparam dpi 100 +skinparam shadowing false +skinparam roundcorner 15 +skinparam ParticipantPadding 30 +skinparam BoxPadding 30 +skinparam Padding 10 +skinparam ArrowColor $GRAY +skinparam stereotype { + CBackgroundColor $SECONDARY_LIGHT + CBorderColor $SECONDARY_DARK + ABackgroundColor $SUCCESS_LIGHT + ABorderColor $SUCCESS_DARK + IBackgroundColor $DANGER_LIGHT + IBorderColor $DANGER_DARK + EBackgroundColor $WARNING_LIGHT + EBorderColor $WARNING_DARK + NBackgroundColor $INFO_LIGHT + NBorderColor $INFO_DARK +} +skinparam title { + FontColor $SECONDARY_TEXT + BorderColor $SECONDARY + FontSize 20 + BorderRoundCorner 8 + BorderThickness 1 + BackgroundColor $SECONDARY_LIGHT-$SECONDARY +} + + +skinparam legend { + BackgroundColor $PRIMARY + BorderColor $PRIMARY_DARK + FontColor $PRIMARY_TEXT +} + +!startsub swimlane +skinparam swimlane { + BorderColor $INFO + BorderThickness 2 + TitleBackgroundColor $SECONDARY_LIGHT-$SECONDARY + TitleFontColor $PRIMARY +} +!endsub + +!startsub activity + +skinparam activity { + $primary_scheme() + BarColor $SUCCESS + StartColor $INFO + EndColor $INFO + '' + DiamondBackgroundColor $SECONDARY-$SECONDARY_DARK + DiamondBorderColor $SECONDARY_DARK + DiamondFontColor $SECONDARY_TEXT +} +!endsub + +!startsub participant + +skinparam participant { + $primary_scheme() + ParticipantBorderThickness 2 +} +!endsub + +!startsub actor + +skinparam actor { + $primary_scheme() +} +!endsub + +!startsub arrow + +skinparam arrow { + Thickness 3 + Color $PRIMARY + FontColor $FGCOLOR +} +!endsub + +!startsub sequence + +skinparam sequence { + BorderColor $PRIMARY + ' For some reason sequence title font color does not pick up from global + TitleFontColor $SECONDARY_TEXT + BackgroundColor $BGCOLOR + StartColor $PRIMARY + EndColor $PRIMARY + '' + BoxBackgroundColor $LIGHT + BoxBorderColor $GRAY + BoxFontColor $DARK + '' + LifeLineBorderColor $SECONDARY_DARK + LifeLineBorderThickness 2 + LifeLineBackgroundColor $SECONDARY_LIGHT + '' + GroupBorderColor $GRAY + GroupFontColor $DARK + GroupHeaderFontColor $INFO + '' + DividerBackgroundColor $WHITE-$LIGHT + DividerBorderColor $GRAY + DividerBorderThickness 2 + DividerFontColor $DARK + '' + ReferenceBackgroundColor $BGCOLOR + ReferenceBorderColor $GRAY + ReferenceFontColor $DARK + ReferenceHeaderFontColor $INFO +} +!endsub + +!startsub partition + +skinparam partition { + BorderColor $PRIMARY + FontColor $PRIMARY_DARK + BackgroundColor $BGCOLOR +} +!endsub + +!startsub collections + +skinparam collections { + $primary_scheme() +} +!endsub + +!startsub control + +skinparam control { + $primary_scheme() +} +!endsub + +!startsub entity + +skinparam entity { + $primary_scheme() +} +!endsub + +!startsub boundary + +skinparam boundary { + $primary_scheme() +} +!endsub + +!startsub agent + +skinparam agent { + BackgroundColor #orange + BorderColor #999999 + FontColor #333333 +} +!endsub + +!startsub note + +skinparam note { + BorderThickness 1 + BackgroundColor $INFO_LIGHT-$INFO + BorderColor $INFO + FontColor $WHITE +} +!endsub + +!startsub artifact + +skinparam artifact { + BackgroundColor white-$LIGHT + BorderColor $SECONDARY_DARK + FontColor $SECONDARY_DARK +} +!endsub + +!startsub component + +skinparam component { + $primary_scheme() +} +!endsub + +!startsub interface + +skinparam interface { + BackgroundColor $DANGER_LIGHT + BorderColor $DANGER + FontColor $DARK +} +!endsub + +!startsub storage + +skinparam storage { + BackgroundColor $WARNING_LIGHT-$WARNING + BorderColor $WARNING + FontColor $WARNING_TEXT +} +!endsub + +!startsub node + +skinparam node { + BackgroundColor $BGCOLOR + BorderColor $PRIMARY_LIGHT + FontColor $PRIMARY_TEXT +} +!endsub + +!startsub cloud + +skinparam cloud { + BackgroundColor #F2FCFE-#eeeeee + BorderColor $F2FCFE + FontColor $PRIMARY_TEXT +} +!endsub + +!startsub database + +skinparam database { + $primary_scheme() + BackgroundColor $BGCOLOR +} +!endsub + +!startsub class + +skinparam class { + $primary_scheme() + HeaderBackgroundColor $PRIMARY_LIGHT-$PRIMARY_DARK + StereotypeFontColor $DARK + StereotypeFontSize 9 + BorderThickness 1 + AttributeFontColor $DARK + AttributeFontSize 11 +} +!endsub + +!startsub object + +skinparam object { + $primary_scheme() + StereotypeFontColor $LIGHT + BorderThickness 1 + AttributeFontColor $DARK + AttributeFontSize 11 +} +!endsub + +!startsub usecase + +skinparam usecase { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub rectangle + +skinparam rectangle { + $primary_scheme() + BackgroundColor $BGCOLOR + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub package + +skinparam package { + $primary_scheme() + BackgroundColor $BGCOLOR + BorderThickness 2 +} +!endsub + +!startsub folder + +skinparam folder { + BackgroundColor $PRIMARY_LIGHT + BorderColor $WARNING + FontColor $WARNING + BorderThickness 2 +} +!endsub + +!startsub frame + +skinparam frame { + BackgroundColor $PRIMARY_LIGHT + BorderColor $INFO + FontColor $INFO + BorderThickness 2 +} +!endsub + +!startsub state + +skinparam state { + $primary_scheme() + BorderColor $PRIMARY_DARK + StartColor $INFO + EndColor $INFO + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub queue + +skinparam queue { + $primary_scheme() +} +!endsub + +!startsub card + +skinparam card { + BackgroundColor $INFO_LIGHT-$INFO + BorderColor $INFO + FontColor $INFO_TEXT +} +!endsub + +!startsub file + +skinparam file { + BackgroundColor $SECONDARY_LIGHT-$SECONDARY + BorderColor $SECONDARY_DARK + FontColor $SECONDARY_TEXT + +} +!endsub + +!startsub stack + +skinparam stack { + $primary_scheme() +} +!endsub diff --git a/themes/puml-theme-materia-outline.puml b/themes/puml-theme-materia-outline.puml new file mode 100644 index 000000000..bb33085c3 --- /dev/null +++ b/themes/puml-theme-materia-outline.puml @@ -0,0 +1,478 @@ +'' +'' materia theme based off of the bootstrap theme of the same name +'' https://bootswatch.com/materia/ +'' +'' Author: Brett Schwarz +'' Copyright (c) 2019 by Brett Schwarz + +!$THEME = "materia-outline" + +!if %not(%variable_exists("$BGCOLOR")) +!$BGCOLOR = "transparent" +!endif + +skinparam backgroundColor $BGCOLOR +skinparam useBetaStyle false + +'' +'' Colors taken from the css file of the BS theme +'' +!$BLUE = "#2196F3" +!$INDIGO = "#6610f2" +!$PURPLE = "#6f42c1" +!$PINK = "#e83e8c" +!$RED = "#e51c23" +!$ORANGE = "#fd7e14" +!$YELLOW = "#ff9800" +!$GREEN = "#4CAF50" +!$TEAL = "#20c997" +!$CYAN = "#9C27B0" +!$WHITE = "#FFF" +!$GRAY_DARK = "#222" +!$GRAY = "#666" +!$PRIMARY = "#2196F3" +!$SECONDARY = "#fff" +!$SUCCESS = "#4CAF50" +!$INFO = "#9C27B0" +!$WARNING = "#ff9800" +!$DANGER = "#e51c23" +!$LIGHT = "#fff" +!$DARK = "#222" + +'' *_LIGHT = tint (lighter) of the main color of 80% +'' where TINT is calculated by clr + (255-clr) * tint_factor +'' *_DARK = shade (darker) of the main color of 80% +'' and SHADE is calculated by clr * (1 - shade_factor) +'' +!$FGCOLOR = $DARK +!$PRIMARY_LIGHT = "#4dabf5" +!$PRIMARY_DARK = "#1a78c2" +!$PRIMARY_TEXT = $PRIMARY +!$SECONDARY_LIGHT = "#fff" +!$SECONDARY_DARK = "#cccccc" +!$SECONDARY_TEXT = $SECONDARY_DARK +!$INFO_LIGHT = "#b052c0" +!$INFO_DARK = "#7D1F8D" +!$INFO_TEXT = $INFO +!$SUCCESS_LIGHT = "#70bf73" +!$SUCCESS_DARK = "#3D8C40" +!$SUCCESS_TEXT = $SUCCESS +!$WARNING_LIGHT = "#ffad33" +!$WARNING_DARK = "#CC7A00" +!$WARNING_TEXT = $WARNING +!$DANGER_LIGHT = "#B7161C" +!$DANGER_TEXT = $DANGER + +!procedure $success($msg) + $msg +!endprocedure + +!procedure $failure($msg) + $msg +!endprocedure + +!procedure $warning($msg) + $msg +!endprocedure + +!procedure $primary_scheme() + FontColor $PRIMARY_TEXT + BorderColor $PRIMARY + BackgroundColor $BGCOLOR +!endprocedure + +'' +'' Global Default Values +'' +skinparam defaultFontName "Verdana" +skinparam defaultFontSize 12 +skinparam dpi 100 +skinparam shadowing true +skinparam roundcorner 8 +skinparam ParticipantPadding 40 +skinparam BoxPadding 40 +skinparam Padding 10 +skinparam TitleFontColor $DARK +skinparam TitleFontSize 20 +skinparam TitleBorderThickness 0 +skinparam ArrowColor $GRAY +skinparam stereotype { + CBackgroundColor $SECONDARY_LIGHT + CBorderColor $SECONDARY_DARK + ABackgroundColor $SUCCESS_LIGHT + ABorderColor $SUCCESS_DARK + IBackgroundColor $DANGER_LIGHT + IBorderColor $DANGER_DARK + EBackgroundColor $WARNING_LIGHT + EBorderColor $WARNING_DARK + NBackgroundColor $INFO_LIGHT + NBorderColor $INFO_DARK +} +skinparam title { + FontColor $PRIMARY + BorderColor $SECONDARY_DARK + FontSize 20 + BorderRoundCorner 8 + BorderThickness 1 + BackgroundColor $BGCOLOR +} + +skinparam legend { + BackgroundColor $BGCOLOR + BorderColor $SECONDARY_DARK + FontColor $DARK +} + +!startsub swimlane +skinparam swimlane { + BorderColor $INFO + BorderThickness 2 + TitleBackgroundColor $SECONDARY_LIGHT-$SECONDARY + TitleFontColor $PRIMARY +} +!endsub + +!startsub activity + +skinparam activity { + $primary_scheme() + ' FontColor $PRIMARY_TEXT + ' BorderColor $PRIMARY + ' BackgroundColor $BGCOLOR + BarColor $SUCCESS + StartColor $INFO + EndColor $INFO + '' + DiamondBackgroundColor $BGCOLOR + DiamondBorderColor $SECONDARY_DARK + DiamondFontColor $SECONDARY_TEXT +} +!endsub + +!startsub participant + +skinparam participant { + $primary_scheme() + ParticipantBorderThickness 2 +} +!endsub + +!startsub actor + +skinparam actor { + $primary_scheme() + ' FontColor $DARK +} +!endsub + +!startsub arrow + +skinparam arrow { + Thickness 3 + Color $PRIMARY + FontColor $FGCOLOR +} +!endsub + +!startsub sequence + +skinparam sequence { + BorderColor $PRIMARY + ' For some reason sequence title font color does not pick up from global + TitleFontColor $PRIMARY + BackgroundColor $BGCOLOR + StartColor $PRIMARY + EndColor $PRIMARY + '' + BoxBackgroundColor $BGCOLOR + BoxBorderColor $GRAY + BoxFontColor $DARK + '' + LifeLineBorderColor $SECONDARY_DARK + LifeLineBorderThickness 2 + LifeLineBackgroundColor $BGCOLOR + '' + GroupBorderColor $GRAY + GroupFontColor $DARK + GroupHeaderFontColor $INFO + '' + DividerBackgroundColor $BGCOLOR + DividerBorderColor $GRAY + DividerBorderThickness 2 + DividerFontColor $DARK + '' + ReferenceBackgroundColor $BGCOLOR + ReferenceBorderColor $GRAY + ReferenceFontColor $DARK + ReferenceHeaderFontColor $INFO +} +!endsub + +!startsub partition + +skinparam partition { + BorderColor $PRIMARY + FontColor $PRIMARY + BackgroundColor $BGCOLOR +} +!endsub + +!startsub collections + +skinparam collections { + $primary_scheme() + ' BackgroundColor $BGCOLOR + ' BorderColor $PRIMARY +} +!endsub + +!startsub control + +skinparam control { + $primary_scheme() + ' BackgroundColor $BGCOLOR + ' BorderColor $PRIMARY_DARK + ' FontColor $DARK +} +!endsub + +!startsub entity + +skinparam entity { + $primary_scheme() + ' BackgroundColor $BGCOLOR + ' BorderColor $PRIMARY_DARK + ' FontColor $DARK +} +!endsub + +!startsub boundary + +skinparam boundary { + $primary_scheme() + ' BackgroundColor $BGCOLOR + ' BorderColor $PRIMARY_DARK + ' FontColor $DARK +} +!endsub + +!startsub agent + +skinparam agent { + BackgroundColor $BGCOLOR + BorderColor #999999 + FontColor #333333 +} +!endsub + +!startsub note + +skinparam note { + BorderThickness 1 + BackgroundColor $BGCOLOR + BorderColor $INFO + FontColor $INFO +} +!endsub + +!startsub artifact + +skinparam artifact { + BackgroundColor $BGCOLOR + BorderColor $GRAY + FontColor $GRAY +} +!endsub + +!startsub component + +skinparam component { + $primary_scheme() + ' BackgroundColor $BGCOLOR + ' BorderColor $SUCCESS + ' FontColor $SUCCESS_TEXT +} +!endsub + +!startsub interface + +skinparam interface { + BackgroundColor $BGCOLOR + BorderColor $DANGER + FontColor $DARK +} +!endsub + +!startsub storage + +skinparam storage { + BackgroundColor $BGCOLOR + BorderColor $WARNING + FontColor $WARNING_TEXT +} +!endsub + +!startsub node + +skinparam node { + BackgroundColor $BGCOLOR + BorderColor $DARK + FontColor $DARK +} +!endsub + +!startsub cloud + +skinparam cloud { + BackgroundColor #F2FCFE-#eeeeee + BorderColor #F2FCFE + FontColor $DARK +} +!endsub + +!startsub database + +skinparam database { + $primary_scheme() + ' BackgroundColor $BGCOLOR + ' BorderColor $PRIMARY_DARK + ' FontColor $DARK +} +!endsub + +!startsub class + +skinparam class { + $primary_scheme() + FontColor $LIGHT + HeaderBackgroundColor $PRIMARY-$PRIMARY_DARK + ' FontColor $PRIMARY_TEXT + ' BackgroundColor $BGCOLOR + ' BorderColor $PRIMARY_DARK + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $DARK + AttributeFontSize 11 +} +!endsub + +!startsub object + +skinparam object { + $primary_scheme() + ' FontColor $SUCCESS + ' BackgroundColor $BGCOLOR + ' BorderColor $SECONDARY_DARK + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $SECONDARY_DARK + AttributeFontSize 11 +} +!endsub + +!startsub usecase + +skinparam usecase { + $primary_scheme() + ' BackgroundColor $BGCOLOR + ' BorderColor $SECONDARY_DARK + BorderThickness 2 + ' FontColor $SECONDARY_TEXT + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub rectangle + +skinparam rectangle { + $primary_scheme() + ' BackgroundColor $BGCOLOR + ' BorderColor $PRIMARY_DARK + BorderThickness 2 + ' FontColor $PRIMARY + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub package + +skinparam package { + BackgroundColor $BGCOLOR + BorderColor $PRIMARY + FontColor $PRIMARY + BorderThickness 2 +} +!endsub + +!startsub folder + +skinparam folder { + BackgroundColor $BGCOLOR + BorderColor $WARNING + FontColor $WARNING + BorderThickness 2 +} +!endsub + +!startsub frame + +skinparam frame { + BackgroundColor $BGCOLOR + BorderColor $INFO + FontColor $INFO + BorderThickness 2 +} +!endsub + +!startsub state + +skinparam state { + $primary_scheme() + StartColor $INFO + EndColor $INFO + ' BackgroundColor $BGCOLOR + ' BorderColor $SECONDARY_DARK + ' FontColor $INFO + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub queue + +skinparam queue { + $primary_scheme() + ' BackgroundColor $BGCOLOR + ' BorderColor $WARNING_DARK + ' FontColor $WARNING_TEXT +} +!endsub + +!startsub card + +skinparam card { + BackgroundColor $BGCOLOR + BorderColor $INFO + FontColor $INFO_TEXT +} +!endsub + +!startsub file + +skinparam file { + BackgroundColor $BGCOLOR + BorderColor $GRAY + FontColor $GRAY + +} +!endsub + +!startsub stack + +skinparam stack { + $primary_scheme() + ' BackgroundColor $BGCOLOR + ' BorderColor $PRIMARY + ' FontColor $PRIMARY_TEXT +} +!endsub diff --git a/themes/puml-theme-materia.puml b/themes/puml-theme-materia.puml new file mode 100644 index 000000000..0ceb815b7 --- /dev/null +++ b/themes/puml-theme-materia.puml @@ -0,0 +1,437 @@ +'' +'' materia theme based off of the bootstrap theme of the same name +'' https://bootswatch.com/materia/ +'' +'' Author: Brett Schwarz +'' Copyright (c) 2019 by Brett Schwarz + +!$THEME = "materia" + +!if %not(%variable_exists("$BGCOLOR")) +!$BGCOLOR = "transparent" +!endif + +skinparam backgroundColor $BGCOLOR +skinparam useBetaStyle false + +'' +'' Colors taken from the css file of the BS theme +'' +!$BLUE = "#2196F3" +!$INDIGO = "#6610f2" +!$PURPLE = "#6f42c1" +!$PINK = "#e83e8c" +!$RED = "#e51c23" +!$ORANGE = "#fd7e14" +!$YELLOW = "#ff9800" +!$GREEN = "#4CAF50" +!$TEAL = "#20c997" +!$CYAN = "#9C27B0" +!$WHITE = "#FFF" +!$GRAY_DARK = "#222" +!$GRAY = "#666" +!$PRIMARY = "#2196F3" +!$SECONDARY = "#fff" +!$SUCCESS = "#4CAF50" +!$INFO = "#9C27B0" +!$WARNING = "#ff9800" +!$DANGER = "#e51c23" +!$LIGHT = "#fff" +!$DARK = "#222" + +'' *_LIGHT = tint (lighter) of the main color of 80% +'' *_DARK = shade (darker) of the main color of 80% +'' +!$FGCOLOR = $DARK +!$PRIMARY_LIGHT = "#4dabf5" +!$PRIMARY_DARK = "#1a78c2" +!$PRIMARY_TEXT = $WHITE +!$SECONDARY_LIGHT = "#fff" +!$SECONDARY_DARK = "#cccccc" +!$SECONDARY_TEXT = $DARK +!$INFO_LIGHT = "#b052c0" +!$INFO_DARK = "#7D1F8D" +!$INFO_TEXT = $WHITE +!$SUCCESS_LIGHT = "#70bf73" +!$SUCCESS_DARK = "#3D8C40" +!$SUCCESS_TEXT = $WHITE +!$WARNING_LIGHT = "#ffad33" +!$WARNING_DARK = "#CC7A00" +!$WARNING_TEXT = $WHITE +!$DANGER_DARK = "#b7161c" +!$DANGER_LIGHT = "#B7161C" +!$DANGER_TEXT = $WHITE + +!procedure $success($msg) + $msg +!endprocedure + +!procedure $failure($msg) + $msg +!endprocedure + +!procedure $warning($msg) + $msg +!endprocedure + +!procedure $primary_scheme() + FontColor $PRIMARY_TEXT + BorderColor $PRIMARY + BackgroundColor $PRIMARY_LIGHT-$PRIMARY +!endprocedure + +'' +'' Global Default Values +'' +skinparam defaultFontName "Verdana" +skinparam defaultFontSize 12 +skinparam dpi 100 +skinparam shadowing true +skinparam roundcorner 8 +skinparam ParticipantPadding 40 +skinparam BoxPadding 40 +skinparam Padding 10 +skinparam ArrowColor $GRAY +skinparam stereotype { + CBackgroundColor $SECONDARY_LIGHT + CBorderColor $SECONDARY_DARK + ABackgroundColor $SUCCESS_LIGHT + ABorderColor $SUCCESS_DARK + IBackgroundColor $DANGER_LIGHT + IBorderColor $DANGER_DARK + EBackgroundColor $WARNING_LIGHT + EBorderColor $WARNING_DARK + NBackgroundColor $INFO_LIGHT + NBorderColor $INFO_DARK +} +skinparam title { + FontColor $PRIMARY + BorderColor $SECONDARY_DARK + FontSize 20 + BorderRoundCorner 8 + BorderThickness 1 + BackgroundColor $SECONDARY_LIGHT-$SECONDARY +} + +skinparam legend { + BackgroundColor $SECONDARY + BorderColor $SECONDARY_DARK + FontColor $DARK +} + +!startsub swimlane +skinparam swimlane { + BorderColor $INFO + BorderThickness 2 + TitleBackgroundColor $SECONDARY_LIGHT-$SECONDARY + TitleFontColor $PRIMARY +} +!endsub + +!startsub activity + +skinparam activity { + $primary_scheme() + BarColor $SUCCESS + StartColor $INFO + EndColor $INFO + '' + DiamondBackgroundColor $WHITE-$SECONDARY_LIGHT + DiamondBorderColor $SECONDARY_DARK + DiamondFontColor $SECONDARY_TEXT +} +!endsub + +!startsub participant + +skinparam participant { + $primary_scheme() + ParticipantBorderThickness 2 +} +!endsub + +!startsub actor + +skinparam actor { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub arrow + +skinparam arrow { + Thickness 3 + Color $PRIMARY + FontColor $FGCOLOR +} +!endsub + +!startsub sequence + +skinparam sequence { + BorderColor $PRIMARY + ' For some reason sequence title font color does not pick up from global + TitleFontColor $PRIMARY + BackgroundColor transparent + StartColor $PRIMARY + EndColor $PRIMARY + '' + BoxBackgroundColor $LIGHT + BoxBorderColor $GRAY + BoxFontColor $DARK + '' + LifeLineBorderColor $SECONDARY_DARK + LifeLineBorderThickness 2 + LifeLineBackgroundColor $SECONDARY_LIGHT + '' + GroupBorderColor $GRAY + GroupFontColor $DARK + GroupHeaderFontColor $INFO + '' + DividerBackgroundColor $WHITE-$LIGHT + DividerBorderColor $GRAY + DividerBorderThickness 2 + DividerFontColor $DARK + '' + ReferenceBackgroundColor $BGCOLOR + ReferenceBorderColor $GRAY + ReferenceFontColor $DARK + ReferenceHeaderFontColor $INFO +} +!endsub + +!startsub partition + +skinparam partition { + BorderColor $PRIMARY + FontColor $PRIMARY + BackgroundColor transparent +} +!endsub + +!startsub collections + +skinparam collections { + $primary_scheme() +} +!endsub + +!startsub control + +skinparam control { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub entity + +skinparam entity { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub boundary + +skinparam boundary { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub agent + +skinparam agent { + BackgroundColor #orange + BorderColor #999999 + FontColor #333333 +} +!endsub + +!startsub note + +skinparam note { + BorderThickness 1 + BackgroundColor $INFO_LIGHT-$INFO + BorderColor $INFO + FontColor $WHITE +} +!endsub + +!startsub artifact + +skinparam artifact { + BackgroundColor $WHITE-$LIGHT + BorderColor $GRAY + FontColor $GRAY +} +!endsub + +!startsub component + +skinparam component { + $primary_scheme() +} +!endsub + +!startsub interface + +skinparam interface { + BackgroundColor $DANGER_LIGHT + BorderColor $DANGER + FontColor $DARK +} +!endsub + +!startsub storage + +skinparam storage { + BackgroundColor $WARNING_LIGHT-$WARNING + BorderColor $WARNING + FontColor $WARNING_TEXT +} +!endsub + +!startsub node + +skinparam node { + BackgroundColor $SECONDARY_LIGHT-$SECONDARY + BorderColor $DARK + FontColor $DARK +} +!endsub + +!startsub cloud + +skinparam cloud { + BackgroundColor #F2FCFE-#eeeeee + BorderColor #F2FCFE + FontColor $DARK +} +!endsub + +!startsub database + +skinparam database { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub class + +skinparam class { + $primary_scheme() + HeaderBackgroundColor $PRIMARY-$PRIMARY_DARK + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $LIGHT + AttributeFontSize 11 +} +!endsub + +!startsub object + +skinparam object { + $primary_scheme() + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub usecase + +skinparam usecase { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub rectangle + +skinparam rectangle { + FontColor $PRIMARY + BackgroundColor $SECONDARY_LIGHT-$SECONDARY + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub package + +skinparam package { + $primary_scheme() + BackgroundColor $SECONDARY_LIGHT-$SECONDARY + BorderThickness 2 +} +!endsub + +!startsub folder + +skinparam folder { + BackgroundColor $WHITE-$SECONDARY_LIGHT + BorderColor $WARNING + FontColor $WARNING + BorderThickness 2 +} +!endsub + +!startsub frame + +skinparam frame { + BackgroundColor $WHITE-$SECONDARY_LIGHT + BorderColor $INFO + FontColor $INFO + BorderThickness 2 +} +!endsub + +!startsub state + +skinparam state { + $primary_scheme() + BorderColor $PRIMARY_DARK + StartColor $INFO + EndColor $INFO + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub queue + +skinparam queue { + $primary_scheme() +} +!endsub + +!startsub card + +skinparam card { + BackgroundColor $INFO_LIGHT-$INFO + BorderColor $INFO + FontColor $INFO_TEXT +} +!endsub + +!startsub file + +skinparam file { + BackgroundColor $SECONDARY_LIGHT-$SECONDARY + BorderColor $GRAY + FontColor $GRAY + +} +!endsub + +!startsub stack + +skinparam stack { + $primary_scheme() +} +!endsub diff --git a/themes/puml-theme-metal.puml b/themes/puml-theme-metal.puml new file mode 100644 index 000000000..a53aa0681 --- /dev/null +++ b/themes/puml-theme-metal.puml @@ -0,0 +1,443 @@ +'' +'' Silver theme - mostly grays +'' +'' Author: Brett Schwarz +'' Copyright (c) 2019 by Brett Schwarz + +!$THEME = "metal" + +!if %not(%variable_exists("$BGCOLOR")) +!$BGCOLOR = "transparent" +!endif + +skinparam backgroundColor $BGCOLOR +skinparam useBetaStyle false + +!$WHITE = "#fdfdfd" +!$GRAY_DARK = "#4d4d4d" +!$GRAY = "#737373" +!$LIGHT = "#f2f2f2" +!$DARK = "#4d4d4d" + +!$SILVER = "#c0c0c0" +!$COPPER = "#B87333c" +!$STEELBLUE = "#4682b4" +!$LIGHTSTEELBLUE = "#B0C4DE" +!$LIGHTSTEELBLUE_DARK = "#8d9db2" +!$LIGHTSTEELBLUE_LIGHT = "#c0d0e5" +!$ALUMINUM = "#c9ced0" +!$ALUMINUM_DARK = "#a1a5a6" +!$ALUMINUM_LIGHT = "#d4d8d9" +!$BRONZE = "#CD7F32" +!$BRONZE_DARK = "#a46628" +!$BRONZE_LIGHT = "#d7995b" +!$GOLD = "#FFD700" +!$PLATINUM = "#E5E4E2" +!$RUST = "#B7410E" + + + +'' *_LIGHT = tint (lighter) of the main color of 80% +'' where TINT is calculated by clr + (255-clr) * tint_factor +'' *_DARK = shade (darker) of the main color of 80% +'' and SHADE is calculated by clr * (1 - shade_factor) +'' +!$FGCOLOR = $DARK +!$PRIMARY = $PLATINUM +!$PRIMARY_LIGHT = "#eae9e8" +!$PRIMARY_DARK = "#b7b6b5" +!$PRIMARY_TEXT = $STEELBLUE +!$SECONDARY = $SILVER +!$SECONDARY_LIGHT = "#cdcdcd" +!$SECONDARY_DARK = "#9a9a9a" +!$SECONDARY_TEXT = $WHITE +!$INFO = $STEELBLUE +!$INFO_LIGHT = "#5c85ad" +!$INFO_DARK = "#29527a" +!$INFO_TEXT = $WHITE +!$SUCCESS = "#339933" +!$SUCCESS_LIGHT = "#5cad5c" +!$SUCCESS_DARK = "#297a29" +!$SUCCESS_TEXT = $WHITE +!$WARNING = $GOLD +!$WARNING_LIGHT = "#ffdf33" +!$WARNING_DARK = "#ccac00" +!$WARNING_TEXT = $WHITE +!$DANGER = $RUST +!$DANGER_LIGHT = "#c5673e" +!$DANGER_DARK = "#92340b" +!$DANGER_TEXT = $WHITE + +!procedure $success($msg) + $msg +!endprocedure + +!procedure $failure($msg) + $msg +!endprocedure + +!procedure $warning($msg) + $msg +!endprocedure + +!procedure $primary_scheme() + FontColor $PRIMARY_TEXT + BorderColor $PRIMARY_DARK + BackgroundColor $PRIMARY-$PRIMARY_DARK +!endprocedure + +'' +'' Global Default Values +'' +skinparam defaultFontName "Verdana" +skinparam defaultFontSize 12 +skinparam dpi 100 +skinparam shadowing false +skinparam roundcorner 15 +skinparam ParticipantPadding 30 +skinparam BoxPadding 30 +skinparam Padding 8 +skinparam ArrowColor $GRAY +skinparam stereotype { + CBackgroundColor $SECONDARY_LIGHT + CBorderColor $SECONDARY_DARK + ABackgroundColor $SUCCESS_LIGHT + ABorderColor $SUCCESS_DARK + IBackgroundColor $DANGER_LIGHT + IBorderColor $DANGER_DARK + EBackgroundColor $WARNING_LIGHT + EBorderColor $WARNING_DARK + NBackgroundColor $INFO_LIGHT + NBorderColor $INFO_DARK +} +skinparam title { + FontColor $WHITE + BorderColor $SECONDARY_DARK + FontSize 20 + BorderRoundCorner 8 + BorderThickness 1 + BackgroundColor $SECONDARY_LIGHT-$SECONDARY_DARK +} + + +skinparam legend { + BackgroundColor $PRIMARY_LIGHT-$PRIMARY + BorderColor $SECONDARY_DARK + FontColor $PRIMARY_TEXT +} + +!startsub swimlane +skinparam swimlane { + BorderColor $INFO + BorderThickness 2 + TitleBackgroundColor $SECONDARY_LIGHT-$SECONDARY + TitleFontColor $PRIMARY +} +!endsub + +!startsub activity + +skinparam activity { + $primary_scheme() + BarColor $BRONZE + StartColor $INFO + EndColor $INFO + '' + DiamondBackgroundColor $SECONDARY-$SECONDARY_DARK + DiamondBorderColor $SECONDARY_DARK + DiamondFontColor $SECONDARY_TEXT +} +!endsub + +!startsub participant + +skinparam participant { + $primary_scheme() + ParticipantBorderThickness 2 +} +!endsub + +!startsub actor + +skinparam actor { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub arrow + +skinparam arrow { + Thickness 3 + Color $PRIMARY + FontColor $FGCOLOR +} +!endsub + +!startsub sequence + +skinparam sequence { + BorderColor $PRIMARY + ' For some reason sequence title font color does not pick up from global + TitleFontColor $WHITE + BackgroundColor $BGCOLOR + StartColor $PRIMARY + EndColor $PRIMARY + '' + BoxBackgroundColor $LIGHT + BoxBorderColor $GRAY + BoxFontColor $DARK + '' + LifeLineBorderColor $SECONDARY_DARK + LifeLineBorderThickness 3 + LifeLineBackgroundColor $SECONDARY_LIGHT-$SECONDARY_DARK + '' + GroupBorderColor $GRAY + GroupFontColor $DARK + GroupHeaderFontColor $INFO + '' + DividerBackgroundColor $WHITE-$LIGHT + DividerBorderColor $GRAY + DividerBorderThickness 2 + DividerFontColor $DARK + '' + ReferenceBackgroundColor $BGCOLOR + ReferenceBorderColor $GRAY + ReferenceFontColor $DARK + ReferenceHeaderFontColor $INFO +} +!endsub + +!startsub partition + +skinparam partition { + BorderColor $PRIMARY + FontColor $PRIMARY_DARK + BackgroundColor $BGCOLOR +} +!endsub + +!startsub collections + +skinparam collections { + $primary_scheme() +} +!endsub + +!startsub control + +skinparam control { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub entity + +skinparam entity { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub boundary + +skinparam boundary { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub agent + +skinparam agent { + BackgroundColor #orange + BorderColor #999999 + FontColor #333333 +} +!endsub + +!startsub note + +skinparam note { + BorderThickness 1 + BackgroundColor $LIGHTSTEELBLUE_LIGHT-$LIGHTSTEELBLUE_DARK + BorderColor $LIGHTSTEELBLUE_DARK + FontColor $WHITE +} +!endsub + +!startsub artifact + +skinparam artifact { + BackgroundColor $SECONDARY_LIGHT-$SECONDARY_DARK + BorderColor $SECONDARY_DARK + FontColor $SECONDARY_TEXT +} +!endsub + +!startsub component + +skinparam component { + $primary_scheme() +} +!endsub + +!startsub interface + +skinparam interface { + BackgroundColor $DANGER_LIGHT + BorderColor $DANGER + FontColor $DARK +} +!endsub + +!startsub storage + +skinparam storage { + BackgroundColor $WARNING_LIGHT-$WARNING_DARK + BorderColor $WARNING_DARK + FontColor $WARNING_TEXT +} +!endsub + +!startsub node + +skinparam node { + BackgroundColor $PRIMARY_LIGHT-$PRIMARY + BorderColor $PRIMARY + FontColor $DARK +} +!endsub + +!startsub cloud + +skinparam cloud { + BackgroundColor #F2FCFE-#eeeeee + BorderColor #F2FCFE + FontColor $DARK +} +!endsub + +!startsub database + +skinparam database { + $primary_scheme() + FontColor $DARK +} +!endsub + +!startsub class + +skinparam class { + $primary_scheme() + HeaderBackgroundColor $PRIMARY_LIGHT-$PRIMARY_DARK + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $DARK + AttributeFontSize 11 +} +!endsub + +!startsub object + +skinparam object { + $primary_scheme() + StereotypeFontColor $LIGHT + BorderThickness 1 + AttributeFontColor $WHITE + AttributeFontSize 11 +} +!endsub + +!startsub usecase + +skinparam usecase { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub rectangle + +skinparam rectangle { + $primary_scheme() + BackgroundColor $WHITE-$LIGHT + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub package + +skinparam package { + $primary_scheme() + BackgroundColor $PRIMARY_LIGHT-$PRIMARY + BorderThickness 2 +} +!endsub + +!startsub folder + +skinparam folder { + BackgroundColor $PRIMARY_LIGHT-$PRIMARY + BorderColor $RUST + FontColor $RUST + BorderThickness 2 +} +!endsub + +!startsub frame + +skinparam frame { + BackgroundColor $PRIMARY_LIGHT-$PRIMARY + BorderColor $INFO + FontColor $INFO + BorderThickness 2 +} +!endsub + +!startsub state + +skinparam state { + $primary_scheme() + StartColor $INFO + EndColor $INFO + AttributeFontColor $SECONDARY + AttributeFontSize 11 +} +!endsub + +!startsub queue + +skinparam queue { + $primary_scheme() +} +!endsub + +!startsub card + +skinparam card { + BackgroundColor $INFO_LIGHT-$INFO_DARK + BorderColor $INFO + FontColor $INFO_TEXT +} +!endsub + +!startsub file + +skinparam file { + BackgroundColor $SECONDARY_LIGHT-$SECONDARY_DARK + BorderColor $GRAY + FontColor $LIGHT + +} +!endsub + +!startsub stack + +skinparam stack { + $primary_scheme() +} +!endsub diff --git a/themes/puml-theme-minty.puml b/themes/puml-theme-minty.puml new file mode 100644 index 000000000..4cb2b8915 --- /dev/null +++ b/themes/puml-theme-minty.puml @@ -0,0 +1,440 @@ +'' +'' superhero theme based off of the bootstrap theme of the same name +'' https://bootswatch.com/minty/ +'' +'' Author = "Brett Schwarz +'' Copyright (c) 2020 by Brett Schwarz + +!$THEME = "minty" + +!if %not(%variable_exists("$BGCOLOR")) +!$BGCOLOR = "transparent" +!endif + +skinparam backgroundColor $BGCOLOR +skinparam useBetaStyle false + +'' +'' Colors taken from the css file of the BS theme +'' +!$BLUE = "#007bff" +!$INDIGO = "#6610f2" +!$PURPLE = "#6f42c1" +!$PINK = "#e83e8c" +!$RED = "#ff7851" +!$ORANGE = "#fd7e14" +!$YELLOW = "#ffce67" +!$GREEN = "#56cc9d" +!$TEAL = "#20c997" +!$CYAN = "#6cc3d5" +!$WHITE = "#fff" +!$GRAY = "#888" +!$GRAYDARK = "#343a40" +!$PRIMARY = "#78c2ad" +!$SECONDARY = "#f3969a" +!$SUCCESS = "#56cc9d" +!$INFO = "#6cc3d5" +!$WARNING = "#ffce67" +!$DANGER = "#ff7851" +!$LIGHT = "#f8f9fa" +!$DARK = "#343a40" + +'' *_DARK = tint (lighter) of the main color of 80% +'' where TINT is calculated by clr + (255-clr) * tint_factor +'' *_LIGHT = shade (darker) of the main color of 80% +'' and SHADE is calculated by clr * (1 - shade_factor) +'' +!$FGCOLOR = $WHITE +!$PRIMARY_DARK = "#6caf9c" +!$PRIMARY_LIGHT = "#86c8b5" +!$PRIMARY_TEXT = $WHITE +!$SECONDARY_DARK = "#db878b" +!$SECONDARY_LIGHT = "#f4a1a4" +!$SECONDARY_TEXT = $WHITE +!$INFO_DARK = "#61b0c0" +!$INFO_LIGHT = "#7bc9d9" +!$INFO_TEXT = $WHITE +!$SUCCESS_DARK = "#4db88d" +!$SUCCESS_LIGHT = "#67d1a7" +!$SUCCESS_TEXT = $WHITE +!$WARNING_DARK = "#e6b95d" +!$WARNING_LIGHT = "#ffd376" +!$WARNING_TEXT = $WHITE +!$DANGER_DARK = "#e66c49" +!$DANGER_LIGHT = "#ff8662" +!$DANGER_TEXT = $WHITE +!$DARK_DARK = "#2f343a" +!$DARK_LIGHT = "#484e53" +!$LIGHT_DARK = "#dfe0e1" +!$LIGHT_LIGHT = "#f9fafb" + +!procedure $success($msg) + $msg +!endprocedure + +!procedure $failure($msg) + $msg +!endprocedure + +!procedure $warning($msg) + $msg +!endprocedure + +!procedure $primary_scheme() + FontColor $PRIMARY_TEXT + BorderColor $PRIMARY + BackgroundColor $PRIMARY_LIGHT +!endprocedure + +'' +'' Global Default Values +'' +skinparam defaultFontName "Verdana" +skinparam defaultFontSize 12 +skinparam dpi 100 +skinparam shadowing false +skinparam roundcorner 8 +skinparam ParticipantPadding 40 +skinparam BoxPadding 40 +skinparam Padding 5 +skinparam ArrowColor $DARK +skinparam stereotype { + CBackgroundColor $SECONDARY_LIGHT + CBorderColor $SECONDARY_DARK + ABackgroundColor $SUCCESS_LIGHT + ABorderColor $SUCCESS_DARK + IBackgroundColor $DANGER_LIGHT + IBorderColor $DANGER_DARK + EBackgroundColor $WARNING_LIGHT + EBorderColor $WARNING_DARK + NBackgroundColor $INFO_LIGHT + NBorderColor $INFO_DARK +} +skinparam title { + FontColor $PRIMARY_DARK + BorderColor $SECONDARY_DARK + FontSize 20 + BorderRoundCorner 8 + BorderThickness 1 + BackgroundColor $SECONDARY_LIGHT-$SECONDARY +} + +skinparam legend { + BackgroundColor $SECONDARY + BorderColor $SECONDARY_DARK + FontColor $LIGHT +} + +!startsub swimlane +skinparam swimlane { + BorderColor $INFO + BorderThickness 2 + TitleBackgroundColor $SECONDARY_LIGHT-$SECONDARY + TitleFontColor $PRIMARY +} +!endsub + +!startsub activity + +skinparam activity { + $primary_scheme() + BarColor $SUCCESS + StartColor $INFO + EndColor $INFO + '' + DiamondBackgroundColor $SECONDARY_LIGHT + DiamondBorderColor $SECONDARY_DARK + DiamondFontColor $SECONDARY_TEXT +} +!endsub + +!startsub participant + +skinparam participant { + $primary_scheme() + ParticipantBorderThickness 2 +} +!endsub + +!startsub actor + +skinparam actor { + $primary_scheme() +} +!endsub + +!startsub arrow + +skinparam arrow { + Thickness 3 + Color $PRIMARY + FontColor $FGCOLOR +} +!endsub + +!startsub sequence + +skinparam sequence { + BorderColor $PRIMARY + ' For some reason sequence title font color does not pick up from global + TitleFontColor $PRIMARY + BackgroundColor $BGCOLOR + StartColor $PRIMARY + EndColor $PRIMARY + '' + BoxBackgroundColor $BGCOLOR + BoxBorderColor $DARK + BoxFontColor $DARk + '' + LifeLineBorderColor $SECONDARY + LifeLineBorderThickness 2 + LifeLineBackgroundColor $SECONDARY_DARK + '' + GroupBorderColor $DARK + GroupFontColor $DARK + GroupHeaderFontColor $INFO + GroupBackgroundColor $SECONDARY + GroupHeaderBackgroundColor $BGCOLOR + '' + DividerBackgroundColor $DARK + DividerBorderColor $DARK + DividerBorderThickness 2 + DividerFontColor $LIGHT + '' + ReferenceBackgroundColor $BGCOLOR + ReferenceBorderColor $DARK + ReferenceFontColor $DARK + ReferenceHeaderFontColor $INFO + ReferenceHeaderBackgroundColor $SECONDARY +} +!endsub + +!startsub partition + +skinparam partition { + BorderColor $PRIMARY + FontColor $PRIMARY + BackgroundColor $BGCOLOR +} +!endsub + +!startsub collections + +skinparam collections { + $primary_scheme() +} +!endsub + +!startsub control + +skinparam control { + $primary_scheme() +} +!endsub + +!startsub entity + +skinparam entity { + $primary_scheme() +} +!endsub + +!startsub boundary + +skinparam boundary { + $primary_scheme() +} +!endsub + +!startsub agent + +skinparam agent { + BackgroundColor $WARNING + BorderColor $WARNING_LIGHT + FontColor $DARK +} +!endsub + +!startsub note + +skinparam note { + BorderThickness 1 + BackgroundColor $INFO + BorderColor $INFO_DARK + FontColor $WHITE +} +!endsub + +!startsub artifact + +skinparam artifact { + BackgroundColor $DARK + BorderColor $DARK_DARK + FontColor $LIGHT +} +!endsub + +!startsub component + +skinparam component { + $primary_scheme() +} +!endsub + +!startsub interface + +skinparam interface { + BackgroundColor $DANGER_DARK + BorderColor $DANGER + FontColor $DARK +} +!endsub + +!startsub storage + +skinparam storage { + BackgroundColor $WARNING + BorderColor $WARNING_DARK + FontColor $WARNING_TEXT +} +!endsub + +!startsub node + +skinparam node { + BackgroundColor $SECONDARY + BorderColor $LIGHT + FontColor $LIGHT +} +!endsub + +!startsub cloud + +skinparam cloud { + BackgroundColor #F2FCFE-#eeeeee + BorderColor #F2FCFE + FontColor $DARK +} +!endsub + +!startsub database + +skinparam database { + $primary_scheme() +} +!endsub + +!startsub class + +skinparam class { + $primary_scheme() + HeaderBackgroundColor $PRIMARY_LIGHT + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $DARK + AttributeFontSize 11 +} +!endsub + +!startsub object + +skinparam object { + $primary_scheme() + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub usecase + +skinparam usecase { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub rectangle + +skinparam rectangle { + $primary_scheme() + BackgroundColor $SECONDARY_LIGHT + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub package + +skinparam package { + BackgroundColor $SECONDARY + BorderColor $PRIMARY + FontColor $PRIMARY + BorderThickness 2 +} +!endsub + +!startsub folder + +skinparam folder { + BackgroundColor $SECONDARY_LIGHT + BorderColor $WARNING + FontColor $WARNING + BorderThickness 2 +} +!endsub + +!startsub frame + +skinparam frame { + BackgroundColor $SECONDARY_LIGHT + BorderColor $INFO + FontColor $INFO + BorderThickness 2 +} +!endsub + +!startsub state + +skinparam state { + $primary_scheme() + StartColor $INFO + EndColor $INFO + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub queue + +skinparam queue { + $primary_scheme() +} +!endsub + +!startsub card + +skinparam card { + BackgroundColor $INFO + BorderColor $INFO_DARK + FontColor $INFO_TEXT +} +!endsub + +!startsub file + +skinparam file { + BackgroundColor $SECONDARY_DARK + BorderColor $LIGHT + FontColor $LIGHT +} +!endsub + +!startsub stack + +skinparam stack { + $primary_scheme() +} +!endsub diff --git a/themes/puml-theme-resume-light.puml b/themes/puml-theme-resume-light.puml new file mode 100644 index 000000000..8592a7577 --- /dev/null +++ b/themes/puml-theme-resume-light.puml @@ -0,0 +1,48 @@ +'' +'' Author: Brett Schwarz +'' + +!$THEME = "resume-light" + +!if %not(%variable_exists("$BGCOLOR")) +!$BGCOLOR = "transparent" +!endif + +skinparam backgroundColor $BGCOLOR +skinparam useBetaStyle false + + +skinparam { + skinparam defaultFontName "Verdana" + skinparam defaultFontSize 12 + defaultTextAlignment center + shadowing false + RoundCorner 10 + TitleFontSize 18 +} + diff --git a/themes/puml-theme-sandstone.puml b/themes/puml-theme-sandstone.puml new file mode 100644 index 000000000..17ea46d5d --- /dev/null +++ b/themes/puml-theme-sandstone.puml @@ -0,0 +1,441 @@ +'' +'' superhero theme based off of the bootstrap theme of the same name +'' https://bootswatch.com/sandstone/ +'' +'' Author: Brett Schwarz +'' Copyright (c) 2020 by Brett Schwarz + +!$THEME = "sandstone" + +!if %not(%variable_exists("$BGCOLOR")) +!$BGCOLOR = "transparent" +!endif + +skinparam backgroundColor $BGCOLOR +skinparam useBetaStyle false + +'' +'' Colors taken from the css file of the BS theme +'' +!$BLUE = "#325d88" +!$INDIGO = "#6610f2" +!$PURPLE = "#6f42c1" +!$PINK = "#e83e8c" +!$RED = "#d9534f" +!$ORANGE = "#f47c3c" +!$YELLOW = "#ffc107" +!$GREEN = "#93c54b" +!$TEAL = "#20c997" +!$CYAN = "#29abe0" +!$WHITE = "#fff" +!$GRAY = "#8e8c84" +!$GRAYDARK = "#3e3f3a" +!$PRIMARY = "#325d88" +!$SECONDARY = "#8e8c84" +!$SUCCESS = "#93c54b" +!$INFO = "#29abe0" +!$WARNING = "#f47c3c" +!$DANGER = "#d9534f" +!$LIGHT = "#f8f5f0" +!$DARK = "#3e3f3a" + +'' *_DARK = tint (lighter) of the main color of 80% +'' where TINT is calculated by clr + (255-clr) * tint_factor +'' *_LIGHT = shade (darker) of the main color of 80% +'' and SHADE is calculated by clr * (1 - shade_factor) +'' +!$FGCOLOR = $WHITE +!$PRIMARY_DARK = "#2d547a" +!$PRIMARY_LIGHT = "#476d94" +!$PRIMARY_TEXT = $WHITE +!$SECONDARY_DARK = "#807e77" +!$SECONDARY_LIGHT = "#999890" +!$SECONDARY_TEXT = $WHITE +!$INFO_DARK = "#259aca" +!$INFO_LIGHT = "#3eb3e3" +!$INFO_TEXT = $WHITE +!$SUCCESS_DARK = "#84b144" +!$SUCCESS_LIGHT = "#9ecb5d" +!$SUCCESS_TEXT = $WHITE +!$WARNING_DARK = "#dc7036" +!$WARNING_LIGHT = "#f58950" +!$WARNING_TEXT = $WHITE +!$DANGER_DARK = "#c34b47" +!$DANGER_LIGHT = "#AE423F" +!$DANGER_TEXT = $WHITE +!$DARK_DARK = "#383934" +!$DARK_LIGHT = "#51524e" +!$LIGHT_DARK = "#dfddd8" +!$LIGHT_LIGHT = "#f9f6f2" + +!procedure $success($msg) + $msg +!endprocedure + +!procedure $failure($msg) + $msg +!endprocedure + +!procedure $warning($msg) + $msg +!endprocedure + +!procedure $primary_scheme() + FontColor $PRIMARY_TEXT + BorderColor $PRIMARY_DARK + BackgroundColor $PRIMARY +!endprocedure + +'' +'' Global Default Values +'' +skinparam defaultFontName "Verdana" +skinparam defaultFontSize 12 +skinparam dpi 100 +skinparam shadowing false +skinparam roundcorner 8 +skinparam ParticipantPadding 40 +skinparam BoxPadding 40 +skinparam Padding 5 +skinparam ArrowColor $DARK +skinparam stereotype { + CBackgroundColor $SECONDARY_LIGHT + CBorderColor $SECONDARY_DARK + ABackgroundColor $SUCCESS_LIGHT + ABorderColor $SUCCESS_DARK + IBackgroundColor $DANGER_LIGHT + IBorderColor $DANGER_DARK + EBackgroundColor $WARNING_LIGHT + EBorderColor $WARNING_DARK + NBackgroundColor $INFO_LIGHT + NBorderColor $INFO_DARK +} +skinparam title { + FontColor $PRIMARY + BorderColor $SECONDARY_DARK + FontSize 20 + BorderRoundCorner 8 + BorderThickness 1 + BackgroundColor $SECONDARY_LIGHT-$SECONDARY +} + +skinparam legend { + BackgroundColor $SECONDARY + BorderColor $SECONDARY_DARK + FontColor $LIGHT +} + +!startsub swimlane +skinparam swimlane { + BorderColor $INFO + BorderThickness 2 + TitleBackgroundColor $SECONDARY_LIGHT-$SECONDARY + TitleFontColor $PRIMARY +} +!endsub + +!startsub activity + +skinparam activity { + $primary_scheme() + BarColor $SUCCESS + StartColor $INFO + EndColor $INFO + '' + DiamondBackgroundColor $SECONDARY_LIGHT + DiamondBorderColor $SECONDARY_DARK + DiamondFontColor $SECONDARY_TEXT +} +!endsub + +!startsub participant + +skinparam participant { + $primary_scheme() + ParticipantBorderThickness 2 +} +!endsub + +!startsub actor + +skinparam actor { + $primary_scheme() +} +!endsub + +!startsub arrow + +skinparam arrow { + Thickness 3 + Color $PRIMARY + FontColor $FGCOLOR +} +!endsub + +!startsub sequence + +skinparam sequence { + BorderColor $PRIMARY + ' For some reason sequence title font color does not pick up from global + TitleFontColor $PRIMARY + BackgroundColor $BGCOLOR + StartColor $PRIMARY + EndColor $PRIMARY + '' + BoxBackgroundColor $BGCOLOR + BoxBorderColor $DARK + BoxFontColor $DARk + '' + LifeLineBorderColor $SECONDARY + LifeLineBorderThickness 2 + LifeLineBackgroundColor $SECONDARY_DARK + '' + GroupBorderColor $DARK + GroupFontColor $DARK + GroupHeaderFontColor $INFO + GroupBackgroundColor $SECONDARY + GroupHeaderBackgroundColor $BGCOLOR + '' + DividerBackgroundColor $DARK + DividerBorderColor $DARK + DividerBorderThickness 2 + DividerFontColor $LIGHT + '' + ReferenceBackgroundColor $BGCOLOR + ReferenceBorderColor $DARK + ReferenceFontColor $DARK + ReferenceHeaderFontColor $INFO + ReferenceHeaderBackgroundColor $SECONDARY +} +!endsub + +!startsub partition + +skinparam partition { + BorderColor $PRIMARY + FontColor $PRIMARY + BackgroundColor $BGCOLOR +} +!endsub + +!startsub collections + +skinparam collections { + $primary_scheme() +} +!endsub + +!startsub control + +skinparam control { + $primary_scheme() +} +!endsub + +!startsub entity + +skinparam entity { + $primary_scheme() +} +!endsub + +!startsub boundary + +skinparam boundary { + $primary_scheme() +} +!endsub + +!startsub agent + +skinparam agent { + BackgroundColor $WARNING + BorderColor $WARNING_LIGHT + FontColor $DARK +} +!endsub + +!startsub note + +skinparam note { + BorderThickness 1 + BackgroundColor $INFO + BorderColor $INFO_DARK + FontColor $WHITE +} +!endsub + +!startsub artifact + +skinparam artifact { + BackgroundColor $DARK + BorderColor $DARK_DARK + FontColor $LIGHT +} +!endsub + +!startsub component + +skinparam component { + $primary_scheme() +} +!endsub + +!startsub interface + +skinparam interface { + BackgroundColor $DANGER_DARK + BorderColor $DANGER + FontColor $DARK +} +!endsub + +!startsub storage + +skinparam storage { + BackgroundColor $WARNING + BorderColor $WARNING_DARK + FontColor $WARNING_TEXT +} +!endsub + +!startsub node + +skinparam node { + BackgroundColor $SECONDARY + BorderColor $LIGHT + FontColor $LIGHT +} +!endsub + +!startsub cloud + +skinparam cloud { + BackgroundColor #F2FCFE-#eeeeee + BorderColor #F2FCFE + FontColor $DARK +} +!endsub + +!startsub database + +skinparam database { + $primary_scheme() +} +!endsub + +!startsub class + +skinparam class { + $primary_scheme() + HeaderBackgroundColor $PRIMARY_LIGHT + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $PRIMARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub object + +skinparam object { + $primary_scheme() + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub usecase + +skinparam usecase { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub rectangle + +skinparam rectangle { + $primary_scheme() + BackgroundColor $SECONDARY_LIGHT + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub package + +skinparam package { + BackgroundColor $SECONDARY + BorderColor $PRIMARY + FontColor $PRIMARY + BorderThickness 2 +} +!endsub + +!startsub folder + +skinparam folder { + BackgroundColor $SECONDARY_LIGHT + BorderColor $WARNING + FontColor $WARNING + BorderThickness 2 +} +!endsub + +!startsub frame + +skinparam frame { + BackgroundColor $SECONDARY_LIGHT + BorderColor $INFO + FontColor $INFO + BorderThickness 2 +} +!endsub + +!startsub state + +skinparam state { + $primary_scheme() + BackgroundColor $PRIMARY_LIGHT + StartColor $INFO + EndColor $INFO + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub queue + +skinparam queue { + $primary_scheme() +} +!endsub + +!startsub card + +skinparam card { + BackgroundColor $INFO + BorderColor $INFO_DARK + FontColor $INFO_TEXT +} +!endsub + +!startsub file + +skinparam file { + BackgroundColor $SECONDARY_DARK + BorderColor $LIGHT + FontColor $LIGHT +} +!endsub + +!startsub stack + +skinparam stack { + $primary_scheme() +} +!endsub diff --git a/themes/puml-theme-silver.puml b/themes/puml-theme-silver.puml new file mode 100644 index 000000000..7d9ecaf2d --- /dev/null +++ b/themes/puml-theme-silver.puml @@ -0,0 +1,452 @@ +'' +'' Silver theme - mostly grays +'' +'' Author: Brett Schwarz +'' Copyright (c) 2019 by Brett Schwarz + +!$THEME = "silver" + +!if %not(%variable_exists("$BGCOLOR")) +!$BGCOLOR = "transparent" +!endif + +skinparam backgroundColor $BGCOLOR +skinparam useBetaStyle false + +!$WHITE = "#FFF" +!$GRAY_DARK = "#4d4d4d" +!$GRAY = "#737373" +!$LIGHT = "#ffffff" +!$DARK = "#303030" + +'' *_LIGHT = tint (lighter) of the main color of 80% +'' where TINT is calculated by clr + (255-clr) * tint_factor +'' *_DARK = shade (darker) of the main color of 80% +'' and SHADE is calculated by clr * (1 - shade_factor) +'' +!$FGCOLOR = $DARK +!$PRIMARY = "#eeeeee" +!$PRIMARY_LIGHT = "#f1f1f1" +!$PRIMARY_DARK = "#bebebe" +!$PRIMARY_TEXT = "#336699" +!$SECONDARY = "#d6d6d6" +!$SECONDARY_LIGHT = "#dedede" +!$SECONDARY_DARK = "#ababab" +!$SECONDARY_TEXT = $LIGHT +!$INFO = "#336699" +!$INFO_LIGHT = "#5c85ad" +!$INFO_DARK = "#29527a" +!$INFO_TEXT = $WHITE +!$SUCCESS = "#339933" +!$SUCCESS_LIGHT = "#5cad5c" +!$SUCCESS_DARK = "#297a29" +!$SUCCESS_TEXT = $WHITE +!$WARNING = "#ffae42" +!$WARNING_LIGHT = "#ffbe68" +!$WARNING_DARK = "#cc8b35" +!$WARNING_TEXT = $WHITE +!$DANGER = "#ff3333" +!$DANGER_LIGHT = "#ff5c5c" +!$DANGER_DARK = "#cc2929" +!$DANGER_TEXT = $WHITE + +!procedure $success($msg) + $msg +!endprocedure + +!procedure $failure($msg) + $msg +!endprocedure + +!procedure $warning($msg) + $msg +!endprocedure + +!procedure $primary_scheme() + FontColor $PRIMARY_TEXT + BorderColor $PRIMARY_LIGHT + BackgroundColor $PRIMARY-$PRIMARY_DARK +!endprocedure + +'' +'' Global Default Values +'' +skinparam defaultFontName "Verdana" +skinparam defaultFontSize 12 +skinparam dpi 100 +skinparam shadowing false +skinparam roundcorner 15 +skinparam ParticipantPadding 30 +skinparam BoxPadding 30 +skinparam Padding 8 +skinparam ArrowColor $GRAY +skinparam stereotype { + CBackgroundColor $SECONDARY_LIGHT + CBorderColor $SECONDARY_DARK + ABackgroundColor $SUCCESS_LIGHT + ABorderColor $SUCCESS_DARK + IBackgroundColor $DANGER_LIGHT + IBorderColor $DANGER_DARK + EBackgroundColor $WARNING_LIGHT + EBorderColor $WARNING_DARK + NBackgroundColor $INFO_LIGHT + NBorderColor $INFO_DARK +} +skinparam title { + FontColor $PRIMARY + BorderColor $SECONDARY_DARK + FontSize 20 + BorderRoundCorner 8 + BorderThickness 1 + BackgroundColor $SECONDARY_LIGHT-$SECONDARY +} + + +skinparam legend { + BackgroundColor $SECONDARY + BorderColor $SECONDARY_DARK + FontColor $SECONDARY_TEXT +} + +!startsub swimlane +skinparam swimlane { + BorderColor $INFO + BorderThickness 2 + TitleBackgroundColor $SECONDARY_LIGHT-$SECONDARY + TitleFontColor $PRIMARY +} +!endsub + +!startsub activity + +skinparam activity { + $primary_scheme() + BarColor $SUCCESS + StartColor $INFO + EndColor $INFO + '' + DiamondBackgroundColor $SECONDARY-$SECONDARY_DARK + DiamondBorderColor $SECONDARY_DARK + DiamondFontColor $SECONDARY_TEXT +} + +!endsub + +!startsub participant + +skinparam participant { + $primary_scheme() + ParticipantBorderThickness 2 +} + +!endsub + +!startsub actor + +skinparam actor { + $primary_scheme() + FontColor $DARK +} + +!endsub + +!startsub arrow + +skinparam arrow { + Thickness 3 + Color $PRIMARY + FontColor $FGCOLOR +} + +!endsub + +!startsub sequence + +skinparam sequence { + BorderColor $PRIMARY + ' For some reason sequence title font color does not pick up from global + TitleFontColor $PRIMARY + BackgroundColor $BGCOLOR + StartColor $PRIMARY + EndColor $PRIMARY + '' + BoxBackgroundColor $LIGHT + BoxBorderColor $GRAY + BoxFontColor $DARK + '' + LifeLineBorderColor $SECONDARY_DARK + LifeLineBorderThickness 2 + LifeLineBackgroundColor $SECONDARY_LIGHT + '' + GroupBorderColor $GRAY + GroupFontColor $DARK + GroupHeaderFontColor $INFO + '' + DividerBackgroundColor $WHITE-$LIGHT + DividerBorderColor $GRAY + DividerBorderThickness 2 + DividerFontColor $DARK + '' + ReferenceBackgroundColor $BGCOLOR + ReferenceBorderColor $GRAY + ReferenceFontColor $DARK + ReferenceHeaderFontColor $INFO +} + +!endsub + +!startsub partition + +skinparam partition { + BorderColor $PRIMARY + FontColor $PRIMARY_DARK + BackgroundColor $BGCOLOR +} + +!endsub + +!startsub collections + +skinparam collections { + $primary_scheme() +} + +!endsub + +!startsub control + +skinparam control { + $primary_scheme() +} + +!endsub + +!startsub entity + +skinparam entity { + $primary_scheme() +} + +!endsub + +!startsub boundary + +skinparam boundary { + $primary_scheme() +} + +!endsub + +!startsub agent + +skinparam agent { + BackgroundColor #orange + BorderColor #999999 + FontColor #333333 +} + +!endsub + +!startsub note + +skinparam note { + BorderThickness 1 + BackgroundColor $INFO_LIGHT-$INFO + BorderColor $INFO + FontColor $WHITE +} + +!endsub + +!startsub artifact + +skinparam artifact { + BackgroundColor $SECONDARY_LIGHT-$SECONDARY_DARK + BorderColor $SECONDARY_DARK + FontColor $SECONDARY_TEXT +} + +!endsub + +!startsub component + +skinparam component { + $primary_scheme() +} + +!endsub + +!startsub interface + +skinparam interface { + BackgroundColor $DANGER_LIGHT + BorderColor $DANGER + FontColor $DARK +} + +!endsub + +!startsub storage + +skinparam storage { + BackgroundColor $WARNING_LIGHT-$WARNING + BorderColor $WARNING + FontColor $WARNING_TEXT +} + +!endsub + +!startsub node + +skinparam node { + BackgroundColor $PRIMARY_LIGHT-$PRIMARY_DARK + BorderColor $PRIMARY_LIGHT + FontColor $PRIMARY_TEXT +} + +!endsub + +!startsub cloud + +skinparam cloud { + BackgroundColor #F2FCFE-#eeeeee + BorderColor #F2FCFE + FontColor $DARK +} + +!endsub + +!startsub database + +skinparam database { + $primary_scheme() + FontColor $DARK +} + +!endsub + +!startsub class + +skinparam class { + $primary_scheme() + HeaderBackgroundColor $PRIMARY_LIGHT-$PRIMARY_DARK + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $DARK + AttributeFontSize 9 +} + +!endsub + +!startsub object + +skinparam object { + $primary_scheme() + StereotypeFontColor $LIGHT + BorderThickness 1 + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} + +!endsub + +!startsub usecase + +skinparam usecase { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} + +!endsub + +!startsub rectangle + +skinparam rectangle { + $primary_scheme() + BackgroundColor $PRIMARY_LIGHT + BorderThickness 2 + StereotypeFontColor $PRIMARY +} + +!endsub + +!startsub package + +skinparam package { + $primary_scheme() + BorderThickness 2 +} + +!endsub + +!startsub folder + +skinparam folder { + BackgroundColor $PRIMARY-$PRIMARY_DARK + BorderColor $WARNING + FontColor $WARNING + BorderThickness 2 +} + +!endsub + +!startsub frame + +skinparam frame { + BackgroundColor $PRIMARY-$PRIMARY_DARK + BorderColor $INFO + FontColor $INFO + BorderThickness 2 +} + +!endsub + +!startsub state + +skinparam state { + $primary_scheme() + StartColor $INFO + EndColor $INFO + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} + +!endsub + +!startsub queue + +skinparam queue { + $primary_scheme() +} + +!endsub + +!startsub card + +skinparam card { + BackgroundColor $INFO_LIGHT-$INFO + BorderColor $INFO + FontColor $INFO_TEXT +} + +!endsub + +!startsub file + +skinparam file { + BackgroundColor $SECONDARY_LIGHT-$SECONDARY + BorderColor $LIGHT + FontColor $LIGHT + +} + +!endsub + +!startsub stack + +skinparam stack { + $primary_scheme() +} + +!endsub diff --git a/themes/puml-theme-sketchy-outline.puml b/themes/puml-theme-sketchy-outline.puml new file mode 100644 index 000000000..4fca80bff --- /dev/null +++ b/themes/puml-theme-sketchy-outline.puml @@ -0,0 +1,441 @@ +'' +'' sketchy-outline theme based off of the bootstrap theme of the same name +'' https://bootswatch.com/sketchy/ +'' +'' Author = "Brett Schwarz +'' Copyright (c) 2020 by Brett Schwarz + +!$THEME = "sketchy-outline" + +!if %not(%variable_exists("$BGCOLOR")) +!$BGCOLOR = "transparent" +!endif + +skinparam backgroundColor $BGCOLOR +skinparam useBetaStyle false +skinparam handwritten true +skinparam shadowing false + +'' +'' Colors taken from the css file of the BS theme +'' +!$BLUE = "#007bff" +!$INDIGO = "#6610f2" +!$PURPLE = "#6f42c1" +!$PINK = "#e83e8c" +!$RED = "#dc3545" +!$ORANGE = "#fd7e14" +!$YELLOW = "#ffc107" +!$GREEN = "#28a745" +!$TEAL = "#20c997" +!$CYAN = "#17a2b8" +!$WHITE = "#ffffff" +!$GRAY = "#868e96" +!$GRAYDARK = "#333333" +!$PRIMARY = "#333333" +!$SECONDARY = "#555555" +!$SUCCESS = "#28a745" +!$INFO = "#17a2b8" +!$WARNING = "#ffc107" +!$DANGER = "#dc3545" +!$LIGHT = "#ffffff" +!$DARK = "#555555" + +'' *_DARK = tint (lighter) of the main color of 80% +'' where TINT is calculated by clr + (255-clr) * tint_factor +'' *_LIGHT = shade (darker) of the main color of 80% +'' and SHADE is calculated by clr * (1 - shade_factor) +'' +!$FGCOLOR = $WHITE +!$PRIMARY_DARK = "#2e2e2e" +!$PRIMARY_LIGHT = "#474747" +!$PRIMARY_TEXT = "#2e2e2e" +!$SECONDARY_DARK = "#4d4d4d" +!$SECONDARY_LIGHT = "#666666" +!$SECONDARY_TEXT = $WHITE +!$INFO_DARK = "#1592a6" +!$INFO_LIGHT = "#2eabbf" +!$INFO_TEXT = $WHITE +!$SUCCESS_DARK = "#24963e" +!$SUCCESS_LIGHT = "#3eb058" +!$SUCCESS_TEXT = $WHITE +!$WARNING_DARK = "#e6ae06" +!$WARNING_LIGHT = "#ffc720" +!$WARNING_TEXT = $WHITE +!$DANGER_DARK = "#c6303e" +!$DANGER_LIGHT = "#e04958" +!$DANGER_TEXT = $WHITE +!$DARK_DARK = "#4d4d4d" +!$DARK_LIGHT = "#666666" +!$LIGHT_DARK = "#e6e6e6" +!$LIGHT_LIGHT = "#ffffff" + +!procedure $success($msg) + $msg +!endprocedure + +!procedure $failure($msg) + $msg +!endprocedure + +!procedure $warning($msg) + $msg +!endprocedure + +!procedure $primary_scheme() + FontColor $PRIMARY_TEXT + BorderColor $PRIMARY + BackgroundColor $BGCOLOR +!endprocedure + +'' +'' Global Default Values +'' +skinparam defaultFontName "Segoe Print" +skinparam defaultFontSize 12 +skinparam dpi 100 +skinparam shadowing false +skinparam roundcorner 8 +skinparam ParticipantPadding 40 +skinparam BoxPadding 40 +skinparam Padding 5 +skinparam ArrowColor $DARK +skinparam stereotype { + CBackgroundColor $BGCOLOR + CBorderColor $SECONDARY_DARK + ABackgroundColor $BGCOLOR + ABorderColor $SUCCESS_DARK + IBackgroundColor $BGCOLOR + IBorderColor $DANGER_DARK + EBackgroundColor $BGCOLOR + EBorderColor $WARNING_DARK + NBackgroundColor $BGCOLOR + NBorderColor $INFO_DARK +} +skinparam title { + FontColor $PRIMARY_TEXT + BorderColor $SECONDARY_DARK + FontSize 20 + BorderRoundCorner 8 + BorderThickness 1 + BackgroundColor $BGCOLOR +} + +skinparam legend { + BackgroundColor $BGCOLOR + BorderColor $SECONDARY_DARK + FontColor $PRIMARY_TEXT +} + +!startsub swimlane +skinparam swimlane { + BorderColor $INFO + BorderThickness 2 + TitleBackgroundColor $BGCOLOR + TitleFontColor $PRIMARY_TEXT +} +!endsub + +!startsub activity + +skinparam activity { + $primary_scheme() + BarColor $SUCCESS + StartColor $INFO + EndColor $INFO + '' + DiamondBackgroundColor $BGCOLOR + DiamondBorderColor $SECONDARY_DARK + DiamondFontColor $PRIMARY_TEXT +} +!endsub + +!startsub participant + +skinparam participant { + $primary_scheme() + ParticipantBorderThickness 2 +} +!endsub + +!startsub actor + +skinparam actor { + $primary_scheme() +} +!endsub + +!startsub arrow + +skinparam arrow { + Thickness 3 + Color $PRIMARY + FontColor $PRIMARY_TEXT +} +!endsub + +!startsub sequence + +skinparam sequence { + BorderColor $PRIMARY + ' For some reason sequence title font color does not pick up from global + TitleFontColor $PRIMARY_TEXT + BackgroundColor $BGCOLOR + StartColor $PRIMARY + EndColor $PRIMARY + '' + BoxBackgroundColor $BGCOLOR + BoxBorderColor $DARK + BoxFontColor $DARK + '' + LifeLineBorderColor $SECONDARY + LifeLineBorderThickness 2 + LifeLineBackgroundColor $SECONDARY_DARK + '' + GroupBorderColor $DARK + GroupFontColor $DARK + GroupHeaderFontColor $INFO + GroupBackgroundColor $SECONDARY + GroupHeaderBackgroundColor $BGCOLOR + '' + DividerBackgroundColor $DARK + DividerBorderColor $DARK + DividerBorderThickness 2 + DividerFontColor $LIGHT + '' + ReferenceBackgroundColor $BGCOLOR + ReferenceBorderColor $DARK + ReferenceFontColor $DARK + ReferenceHeaderFontColor $INFO + ReferenceHeaderBackgroundColor $SECONDARY +} +!endsub + +!startsub partition + +skinparam partition { + BorderColor $PRIMARY + FontColor $PRIMARY + BackgroundColor $BGCOLOR +} +!endsub + +!startsub collections + +skinparam collections { + $primary_scheme() +} +!endsub + +!startsub control + +skinparam control { + $primary_scheme() +} +!endsub + +!startsub entity + +skinparam entity { + $primary_scheme() +} +!endsub + +!startsub boundary + +skinparam boundary { + $primary_scheme() +} +!endsub + +!startsub agent + +skinparam agent { + BackgroundColor $WARNING + BorderColor $WARNING_LIGHT + FontColor $DARK +} +!endsub + +!startsub note + +skinparam note { + BorderThickness 1 + BackgroundColor $INFO + BorderColor $INFO_DARK + FontColor $WHITE +} +!endsub + +!startsub artifact + +skinparam artifact { + BackgroundColor $BGCOLOR + BorderColor $DARK_DARK + FontColor $DARK_DARK +} +!endsub + +!startsub component + +skinparam component { + $primary_scheme() +} +!endsub + +!startsub interface + +skinparam interface { + BackgroundColor $BGCOLOR + BorderColor $DANGER + FontColor $DARK +} +!endsub + +!startsub storage + +skinparam storage { + BackgroundColor $BGCOLOR + BorderColor $WARNING_DARK + FontColor $WARNING_DARK +} +!endsub + +!startsub node + +skinparam node { + BackgroundColor $BGCOLOR + BorderColor $LIGHT + FontColor $LIGHT +} +!endsub + +!startsub cloud + +skinparam cloud { + BackgroundColor $BGCOLOR + BorderColor #F2FCFE + FontColor $PRIMARY_TEXT +} +!endsub + +!startsub database + +skinparam database { + $primary_scheme() +} +!endsub + +!startsub class + +skinparam class { + $primary_scheme() + HeaderBackgroundColor $BGCOLOR + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $DARK + AttributeFontSize 11 +} +!endsub + +!startsub object + +skinparam object { + $primary_scheme() + StereotypeFontColor $PRIMARY_TEXT + BorderThickness 1 + AttributeFontColor $PRIMARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub usecase + +skinparam usecase { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub rectangle + +skinparam rectangle { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub package + +skinparam package { + BackgroundColor $BGCOLOR + BorderColor $PRIMARY + FontColor $PRIMARY + BorderThickness 2 +} +!endsub + +!startsub folder + +skinparam folder { + BackgroundColor $BGCOLOR + BorderColor $WARNING + FontColor $WARNING + BorderThickness 2 +} +!endsub + +!startsub frame + +skinparam frame { + BackgroundColor $BGCOLOR + BorderColor $INFO + FontColor $INFO + BorderThickness 2 +} +!endsub + +!startsub state + +skinparam state { + $primary_scheme() + StartColor $INFO + EndColor $INFO + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub queue + +skinparam queue { + $primary_scheme() +} +!endsub + +!startsub card + +skinparam card { + BackgroundColor $BGCOLOR + BorderColor $INFO_DARK + FontColor $INFO_DARK +} +!endsub + +!startsub file + +skinparam file { + BackgroundColor $BGCOLOR + BorderColor $LIGHT + FontColor $LIGHT +} +!endsub + +!startsub stack + +skinparam stack { + $primary_scheme() +} +!endsub diff --git a/themes/puml-theme-sketchy.puml b/themes/puml-theme-sketchy.puml new file mode 100644 index 000000000..2b41aae2c --- /dev/null +++ b/themes/puml-theme-sketchy.puml @@ -0,0 +1,443 @@ +'' +'' superhero theme based off of the bootstrap theme of the same name +'' https://bootswatch.com/sketchy/ +'' +'' Author = "Brett Schwarz +'' Copyright (c) 2020 by Brett Schwarz + +!$THEME = "sketchy" + +!if %not(%variable_exists("$BGCOLOR")) +!$BGCOLOR = "transparent" +!endif + +skinparam backgroundColor $BGCOLOR +skinparam useBetaStyle false +skinparam handwritten true +skinparam shadowing false + +'' +'' Colors taken from the css file of the BS theme +'' +!$BLUE = "#007bff" +!$INDIGO = "#6610f2" +!$PURPLE = "#6f42c1" +!$PINK = "#e83e8c" +!$RED = "#dc3545" +!$ORANGE = "#fd7e14" +!$YELLOW = "#ffc107" +!$GREEN = "#28a745" +!$TEAL = "#20c997" +!$CYAN = "#17a2b8" +!$WHITE = "#ffffff" +!$GRAY = "#868e96" +!$GRAYDARK = "#333333" +!$PRIMARY = "#333333" +!$SECONDARY = "#555555" +!$SUCCESS = "#28a745" +!$INFO = "#17a2b8" +!$WARNING = "#ffc107" +!$DANGER = "#dc3545" +!$LIGHT = "#ffffff" +!$DARK = "#555555" + +'' *_DARK = tint (lighter) of the main color of 80% +'' where TINT is calculated by clr + (255-clr) * tint_factor +'' *_LIGHT = shade (darker) of the main color of 80% +'' and SHADE is calculated by clr * (1 - shade_factor) +'' +!$FGCOLOR = $WHITE +!$PRIMARY_DARK = "#2e2e2e" +!$PRIMARY_LIGHT = "#474747" +!$PRIMARY_TEXT = $WHITE +!$SECONDARY_DARK = "#4d4d4d" +!$SECONDARY_LIGHT = "#666666" +!$SECONDARY_TEXT = $WHITE +!$INFO_DARK = "#1592a6" +!$INFO_LIGHT = "#2eabbf" +!$INFO_TEXT = $WHITE +!$SUCCESS_DARK = "#24963e" +!$SUCCESS_LIGHT = "#3eb058" +!$SUCCESS_TEXT = $WHITE +!$WARNING_DARK = "#e6ae06" +!$WARNING_LIGHT = "#ffc720" +!$WARNING_TEXT = $WHITE +!$DANGER_DARK = "#c6303e" +!$DANGER_LIGHT = "#e04958" +!$DANGER_TEXT = $WHITE +!$DARK_DARK = "#4d4d4d" +!$DARK_LIGHT = "#666666" +!$LIGHT_DARK = "#e6e6e6" +!$LIGHT_LIGHT = "#ffffff" + +!procedure $success($msg) + $msg +!endprocedure + +!procedure $failure($msg) + $msg +!endprocedure + +!procedure $warning($msg) + $msg +!endprocedure + +!procedure $primary_scheme() + FontColor $PRIMARY_TEXT + BorderColor $PRIMARY + BackgroundColor $PRIMARY_LIGHT +!endprocedure + +'' +'' Global Default Values +'' +skinparam defaultFontName "Segoe Print" +skinparam defaultFontSize 12 +skinparam dpi 100 +skinparam shadowing false +skinparam roundcorner 8 +skinparam ParticipantPadding 40 +skinparam BoxPadding 40 +skinparam Padding 5 +skinparam ArrowColor $DARK +skinparam stereotype { + CBackgroundColor $SECONDARY_LIGHT + CBorderColor $SECONDARY_DARK + ABackgroundColor $SUCCESS_LIGHT + ABorderColor $SUCCESS_DARK + IBackgroundColor $DANGER_LIGHT + IBorderColor $DANGER_DARK + EBackgroundColor $WARNING_LIGHT + EBorderColor $WARNING_DARK + NBackgroundColor $INFO_LIGHT + NBorderColor $INFO_DARK +} +skinparam title { + FontColor $FGCOLOR + BorderColor $SECONDARY_DARK + FontSize 20 + BorderRoundCorner 8 + BorderThickness 1 + BackgroundColor $SECONDARY_LIGHT-$SECONDARY +} + +skinparam legend { + BackgroundColor $SECONDARY + BorderColor $SECONDARY_DARK + FontColor $LIGHT +} + +!startsub swimlane +skinparam swimlane { + BorderColor $INFO + BorderThickness 2 + TitleBackgroundColor $SECONDARY_LIGHT-$SECONDARY + TitleFontColor $FGCOLOR +} +!endsub + +!startsub activity + +skinparam activity { + $primary_scheme() + BarColor $SUCCESS + StartColor $INFO + EndColor $INFO + '' + DiamondBackgroundColor $SECONDARY_LIGHT + DiamondBorderColor $SECONDARY_DARK + DiamondFontColor $SECONDARY_TEXT +} +!endsub + +!startsub participant + +skinparam participant { + $primary_scheme() + ParticipantBorderThickness 2 +} +!endsub + +!startsub actor + +skinparam actor { + $primary_scheme() +} +!endsub + +!startsub arrow + +skinparam arrow { + Thickness 3 + Color $PRIMARY + FontColor $FGCOLOR +} +!endsub + +!startsub sequence + +skinparam sequence { + BorderColor $PRIMARY + ' For some reason sequence title font color does not pick up from global + TitleFontColor $PRIMARY + BackgroundColor $BGCOLOR + StartColor $PRIMARY + EndColor $PRIMARY + '' + BoxBackgroundColor $BGCOLOR + BoxBorderColor $DARK + BoxFontColor $DARk + '' + LifeLineBorderColor $SECONDARY + LifeLineBorderThickness 2 + LifeLineBackgroundColor $SECONDARY_DARK + '' + GroupBorderColor $DARK + GroupFontColor $DARK + GroupHeaderFontColor $INFO + GroupBackgroundColor $SECONDARY + GroupHeaderBackgroundColor $BGCOLOR + '' + DividerBackgroundColor $DARK + DividerBorderColor $DARK + DividerBorderThickness 2 + DividerFontColor $LIGHT + '' + ReferenceBackgroundColor $BGCOLOR + ReferenceBorderColor $DARK + ReferenceFontColor $DARK + ReferenceHeaderFontColor $INFO + ReferenceHeaderBackgroundColor $SECONDARY +} +!endsub + +!startsub partition + +skinparam partition { + BorderColor $PRIMARY + FontColor $PRIMARY + BackgroundColor $BGCOLOR +} +!endsub + +!startsub collections + +skinparam collections { + $primary_scheme() +} +!endsub + +!startsub control + +skinparam control { + $primary_scheme() +} +!endsub + +!startsub entity + +skinparam entity { + $primary_scheme() +} +!endsub + +!startsub boundary + +skinparam boundary { + $primary_scheme() +} +!endsub + +!startsub agent + +skinparam agent { + BackgroundColor $WARNING + BorderColor $WARNING_LIGHT + FontColor $DARK +} +!endsub + +!startsub note + +skinparam note { + BorderThickness 1 + BackgroundColor $INFO + BorderColor $INFO_DARK + FontColor $WHITE +} +!endsub + +!startsub artifact + +skinparam artifact { + BackgroundColor $DARK + BorderColor $DARK_DARK + FontColor $LIGHT +} +!endsub + +!startsub component + +skinparam component { + $primary_scheme() +} +!endsub + +!startsub interface + +skinparam interface { + BackgroundColor $DANGER_DARK + BorderColor $DANGER + FontColor $DARK +} +!endsub + +!startsub storage + +skinparam storage { + BackgroundColor $WARNING + BorderColor $WARNING_DARK + FontColor $WARNING_TEXT +} +!endsub + +!startsub node + +skinparam node { + BackgroundColor $SECONDARY + BorderColor $LIGHT + FontColor $LIGHT +} +!endsub + +!startsub cloud + +skinparam cloud { + BackgroundColor #F2FCFE-#eeeeee + BorderColor #F2FCFE + FontColor $DARK +} +!endsub + +!startsub database + +skinparam database { + $primary_scheme() +} +!endsub + +!startsub class + +skinparam class { + $primary_scheme() + FontColor $FGCOLOR + HeaderBackgroundColor $PRIMARY_LIGHT + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $LIGHT + AttributeFontSize 11 +} +!endsub + +!startsub object + +skinparam object { + $primary_scheme() + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub usecase + +skinparam usecase { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub rectangle + +skinparam rectangle { + $primary_scheme() + BackgroundColor $SECONDARY_LIGHT + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub package + +skinparam package { + BackgroundColor $SECONDARY + BorderColor $PRIMARY + FontColor $PRIMARY + BorderThickness 2 +} +!endsub + +!startsub folder + +skinparam folder { + BackgroundColor $SECONDARY_LIGHT + BorderColor $WARNING + FontColor $WARNING + BorderThickness 2 +} +!endsub + +!startsub frame + +skinparam frame { + BackgroundColor $SECONDARY_LIGHT + BorderColor $INFO + FontColor $INFO + BorderThickness 2 +} +!endsub + +!startsub state + +skinparam state { + $primary_scheme() + StartColor $INFO + EndColor $INFO + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub queue + +skinparam queue { + $primary_scheme() +} +!endsub + +!startsub card + +skinparam card { + BackgroundColor $INFO + BorderColor $INFO_DARK + FontColor $INFO_TEXT +} +!endsub + +!startsub file + +skinparam file { + BackgroundColor $SECONDARY_DARK + BorderColor $LIGHT + FontColor $LIGHT +} +!endsub + +!startsub stack + +skinparam stack { + $primary_scheme() +} +!endsub diff --git a/themes/puml-theme-spacelab.puml b/themes/puml-theme-spacelab.puml new file mode 100644 index 000000000..a24104134 --- /dev/null +++ b/themes/puml-theme-spacelab.puml @@ -0,0 +1,441 @@ +'' +'' superhero theme based off of the bootstrap theme of the same name +'' https://bootswatch.com/spacelab/ +'' +'' Author = "Brett Schwarz +'' Copyright (c) 2020 by Brett Schwarz + +!$THEME = "spacelab" + +!if %not(%variable_exists("$BGCOLOR")) +!$BGCOLOR = "transparent" +!endif + +skinparam backgroundColor $BGCOLOR +skinparam useBetaStyle false + +'' +'' Colors taken from the css file of the BS theme +'' +!$BLUE = "#446e9b" +!$INDIGO = "#6610f2" +!$PURPLE = "#6f42c1" +!$PINK = "#e83e8c" +!$RED = "#cd0200" +!$ORANGE = "#fd7e14" +!$YELLOW = "#d47500" +!$GREEN = "#3cb521" +!$TEAL = "#20c997" +!$CYAN = "#3399f3" +!$WHITE = "#ffffff" +!$GRAY = "#777777" +!$GRAYDARK = "#333333" +!$PRIMARY = "#446e9b" +!$SECONDARY = "#999999" +!$SUCCESS = "#3cb521" +!$INFO = "#3399f3" +!$WARNING = "#d47500" +!$DANGER = "#cd0200" +!$LIGHT = "#eeeeee" +!$DARK = "#333333" + +'' *_DARK = tint (lighter) of the main color of 80% +'' where TINT is calculated by clr + (255-clr) * tint_factor +'' *_LIGHT = shade (darker) of the main color of 80% +'' and SHADE is calculated by clr * (1 - shade_factor) +'' +!$FGCOLOR = $WHITE +!$PRIMARY_DARK = "#304d6d" +!$PRIMARY_LIGHT = "#7c9ab9" +!$PRIMARY_TEXT = $WHITE +!$SECONDARY_DARK = "#6b6b6b" +!$SECONDARY_LIGHT = "#b8b8b8" +!$SECONDARY_TEXT = $WHITE +!$INFO_DARK = "#246baa" +!$INFO_LIGHT = "#70b8f7" +!$INFO_TEXT = $WHITE +!$SUCCESS_DARK = "#32a243" +!$SUCCESS_LIGHT = "#4cbc5c" +!$SUCCESS_TEXT = $WHITE +!$WARNING_DARK = "#945200" +!$WARNING_LIGHT = "#e19e4d" +!$WARNING_TEXT = $WHITE +!$DANGER_DARK = "#900100" +!$DANGER_LIGHT = "#dc4e4d" +!$DANGER_TEXT = $WHITE +!$DARK_DARK = "#242424" +!$DARK_LIGHT = "#707070" +!$LIGHT_DARK = "#a7a7a7" +!$LIGHT_LIGHT = "#f3f3f3" + +!procedure $success($msg) + $msg +!endprocedure + +!procedure $failure($msg) + $msg +!endprocedure + +!procedure $warning($msg) + $msg +!endprocedure + +!procedure $primary_scheme() + FontColor $PRIMARY_TEXT + BorderColor $PRIMARY_DARK + BackgroundColor $PRIMARY_LIGHT-$PRIMARY_DARK +!endprocedure + +'' +'' Global Default Values +'' +skinparam defaultFontName "Verdana" +skinparam defaultFontSize 12 +skinparam dpi 100 +skinparam shadowing false +skinparam roundcorner 8 +skinparam ParticipantPadding 40 +skinparam BoxPadding 40 +skinparam Padding 5 +skinparam ArrowColor $DARK +skinparam stereotype { + CBackgroundColor $SECONDARY_LIGHT + CBorderColor $SECONDARY_DARK + ABackgroundColor $SUCCESS_LIGHT + ABorderColor $SUCCESS_DARK + IBackgroundColor $DANGER_LIGHT + IBorderColor $DANGER_DARK + EBackgroundColor $WARNING_LIGHT + EBorderColor $WARNING_DARK + NBackgroundColor $INFO_LIGHT + NBorderColor $INFO_DARK +} +skinparam title { + FontColor $PRIMARY_DARK + BorderColor $SECONDARY_DARK + FontSize 20 + BorderRoundCorner 8 + BorderThickness 1 + BackgroundColor $SECONDARY_LIGHT-$SECONDARY +} + +skinparam legend { + BackgroundColor $SECONDARY + BorderColor $SECONDARY_DARK + FontColor $LIGHT +} + +!startsub swimlane +skinparam swimlane { + BorderColor $INFO + BorderThickness 2 + TitleBackgroundColor $SECONDARY_LIGHT-$SECONDARY + TitleFontColor $PRIMARY_DARK +} +!endsub + +!startsub activity + +skinparam activity { + $primary_scheme() + BarColor $SUCCESS + StartColor $INFO + EndColor $INFO + '' + DiamondBackgroundColor $SECONDARY_LIGHT-$SECONDARY_DARK + DiamondBorderColor $SECONDARY_DARK + DiamondFontColor $SECONDARY_TEXT +} +!endsub + +!startsub participant + +skinparam participant { + $primary_scheme() + ParticipantBorderThickness 2 +} +!endsub + +!startsub actor + +skinparam actor { + $primary_scheme() +} +!endsub + +!startsub arrow + +skinparam arrow { + Thickness 3 + Color $PRIMARY + FontColor $FGCOLOR +} +!endsub + +!startsub sequence + +skinparam sequence { + BorderColor $PRIMARY + ' For some reason sequence title font color does not pick up from global + TitleFontColor $PRIMARY + BackgroundColor $BGCOLOR + StartColor $PRIMARY + EndColor $PRIMARY + '' + BoxBackgroundColor $BGCOLOR + BoxBorderColor $DARK + BoxFontColor $DARk + '' + LifeLineBorderColor $SECONDARY + LifeLineBorderThickness 2 + LifeLineBackgroundColor $SECONDARY_DARK-$SECONDARY_DARK + '' + GroupBorderColor $DARK + GroupFontColor $DARK + GroupHeaderFontColor $INFO + GroupBackgroundColor $SECONDARY_DARK-$SECONDARY_DARK + GroupHeaderBackgroundColor $BGCOLOR + '' + DividerBackgroundColor $DARK_LIGHT-$DARK_DARK + DividerBorderColor $DARK + DividerBorderThickness 2 + DividerFontColor $LIGHT + '' + ReferenceBackgroundColor $BGCOLOR + ReferenceBorderColor $DARK + ReferenceFontColor $DARK + ReferenceHeaderFontColor $INFO + ReferenceHeaderBackgroundColor $SECONDARY_DARK-$SECONDARY_DARK +} +!endsub + +!startsub partition + +skinparam partition { + BorderColor $PRIMARY + FontColor $PRIMARY + BackgroundColor $BGCOLOR +} +!endsub + +!startsub collections + +skinparam collections { + $primary_scheme() +} +!endsub + +!startsub control + +skinparam control { + $primary_scheme() +} +!endsub + +!startsub entity + +skinparam entity { + $primary_scheme() +} +!endsub + +!startsub boundary + +skinparam boundary { + $primary_scheme() +} +!endsub + +!startsub agent + +skinparam agent { + BackgroundColor $WARNING + BorderColor $WARNING_LIGHT + FontColor $DARK +} +!endsub + +!startsub note + +skinparam note { + BorderThickness 1 + BackgroundColor $INFO_LIGHT-$INFO_DARK + BorderColor $INFO_DARK + FontColor $WHITE +} +!endsub + +!startsub artifact + +skinparam artifact { + BackgroundColor $DARK + BorderColor $DARK_DARK + FontColor $LIGHT +} +!endsub + +!startsub component + +skinparam component { + $primary_scheme() +} +!endsub + +!startsub interface + +skinparam interface { + BackgroundColor $DANGER_DARK + BorderColor $DANGER + FontColor $DARK +} +!endsub + +!startsub storage + +skinparam storage { + BackgroundColor $WARNING + BorderColor $WARNING_DARK + FontColor $WARNING_TEXT +} +!endsub + +!startsub node + +skinparam node { + BackgroundColor $SECONDARY + BorderColor $LIGHT + FontColor $LIGHT +} +!endsub + +!startsub cloud + +skinparam cloud { + BackgroundColor #F2FCFE-#eeeeee + BorderColor #F2FCFE + FontColor $DARK +} +!endsub + +!startsub database + +skinparam database { + $primary_scheme() +} +!endsub + +!startsub class + +skinparam class { + $primary_scheme() + FontColor $WHITE + HeaderBackgroundColor $PRIMARY_LIGHT-$PRIMARY + StereotypeFontColor $LIGHT + BorderThickness 1 + AttributeFontColor $LIGHT + AttributeFontSize 11 +} +!endsub + +!startsub object + +skinparam object { + $primary_scheme() + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub usecase + +skinparam usecase { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub rectangle + +skinparam rectangle { + $primary_scheme() + BackgroundColor $SECONDARY_LIGHT-$SECONDARY_DARK + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub package + +skinparam package { + BackgroundColor $SECONDARY_LIGHT-$SECONDARY_DARK + BorderColor $PRIMARY + FontColor $PRIMARY + BorderThickness 2 +} +!endsub + +!startsub folder + +skinparam folder { + BackgroundColor $SECONDARY_LIGHT-$SECONDARY_DARK + BorderColor $WARNING + FontColor $WARNING + BorderThickness 2 +} +!endsub + +!startsub frame + +skinparam frame { + BackgroundColor $SECONDARY_LIGHT-$SECONDARY_DARK + BorderColor $INFO + FontColor $INFO + BorderThickness 2 +} +!endsub + +!startsub state + +skinparam state { + $primary_scheme() + StartColor $INFO + EndColor $INFO + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub queue + +skinparam queue { + $primary_scheme() +} +!endsub + +!startsub card + +skinparam card { + BackgroundColor $INFO_LIGHT-$INFO_DARK + BorderColor $INFO_DARK + FontColor $INFO_TEXT +} +!endsub + +!startsub file + +skinparam file { + BackgroundColor $SECONDARY_DARK-$SECONDARY_DARK + BorderColor $LIGHT + FontColor $LIGHT +} +!endsub + +!startsub stack + +skinparam stack { + $primary_scheme() +} +!endsub diff --git a/themes/puml-theme-superhero-outline.puml b/themes/puml-theme-superhero-outline.puml new file mode 100644 index 000000000..5a5381a76 --- /dev/null +++ b/themes/puml-theme-superhero-outline.puml @@ -0,0 +1,446 @@ +'' +'' superhero theme based off of the bootstrap theme of the same name +'' https://bootswatch.com/superhero/ +'' +'' Author: Brett Schwarz +'' Copyright (c) 2019 by Brett Schwarz + +!$THEME = "superhero-outline" + +!if %not(%variable_exists("$BGCOLOR")) +!$BGCOLOR = "transparent" +!endif + +skinparam backgroundColor $BGCOLOR +skinparam useBetaStyle false + +'' +'' Colors taken from the css file of the BS theme +'' +!$BLUE = "#DF691A" +!$INDIGO = "#6610f2" +!$PURPLE = "#6f42c1" +!$PINK = "#e83e8c" +!$RED = "#d9534f" +!$ORANGE = "#f0ad4e" +!$YELLOW = "#f0ad4e" +!$GREEN = "#5cb85c" +!$TEAL = "#20c997" +!$CYAN = "#5bc0de" +!$WHITE = "#FFF" +!$GRAY_LIGHT = "#222" +!$GRAY = "#868e96" +!$PRIMARY = "#DF691A" +!$SECONDARY = "#4E5D6C" +!$SUCCESS = "#5cb85c" +!$INFO = "#5bc0de" +!$WARNING = "#f0ad4e" +!$DANGER = "#d9534f" +!$LIGHT = "#abb6c2" +!$DARK = "#4E5D6C" + +'' *_DARK = tint (lighter) of the main color of 80% +'' where TINT is calculated by clr + (255-clr) * tint_factor +'' *_LIGHT = shade (darker) of the main color of 80% +'' and SHADE is calculated by clr * (1 - shade_factor) +'' +!$FGCOLOR = $WHITE +!$PRIMARY_DARK = "#e58748" +!$PRIMARY_LIGHT = "#b25415" +!$PRIMARY_TEXT = $PRIMARY +!$SECONDARY_DARK = "#717d89" +!$SECONDARY_LIGHT = "#3e4a56" +!$SECONDARY_TEXT = $SECONDARY_DARK +!$INFO_DARK = "#7ccde5" +!$INFO_LIGHT = "#499AB2" +!$INFO_TEXT = $INFO +!$SUCCESS_DARK = "#4a934a" +!$SUCCESS_LIGHT = "#5F8F00" +!$SUCCESS_TEXT = $SUCCESS +!$WARNING_DARK = "#f3bd71" +!$WARNING_LIGHT = "#C08A3E" +!$WARNING_TEXT = $WARNING +!$DANGER_DARK = "#e17572" +!$DANGER_LIGHT = "#AE423F" +!$DANGER_TEXT = $WHITE +!$DARK_DARK = "#717d89" +!$DARK_LIGHT = "#3e4a56" +!$LIGHT_DARK = "#bcc5ce" +!$LIGHT_LIGHT = "#89929b" + +!procedure $success($msg) + $msg +!endprocedure + +!procedure $failure($msg) + $msg +!endprocedure + +!procedure $warning($msg) + $msg +!endprocedure + +!procedure $primary_scheme() + FontColor $PRIMARY_TEXT + BorderColor $PRIMARY_DARK + BackgroundColor $BGCOLOR +!endprocedure + +'' +'' Global Default Values +'' +skinparam defaultFontName "Verdana" +skinparam defaultFontSize 12 +skinparam dpi 100 +skinparam shadowing false +skinparam roundcorner 8 +skinparam ParticipantPadding 40 +skinparam BoxPadding 40 +skinparam Padding 5 +skinparam TitleFontColor $DARK +skinparam TitleFontSize 20 +skinparam TitleBorderThickness 0 +skinparam ArrowColor $DARK +skinparam stereotype { + CBackgroundColor $SECONDARY_DARK + CBorderColor $SECONDARY_LIGHT + ABackgroundColor $SUCCESS_LIGHT + ABorderColor $SUCCESS_DARK + IBackgroundColor $DANGER_LIGHT + IBorderColor $DANGER_DARK + EBackgroundColor $WARNING_LIGHT + EBorderColor $WARNING_DARK + NBackgroundColor $INFO_LIGHT + NBorderColor $INFO_DARK +} +skinparam title { + FontColor $PRIMARY + BorderColor $SECONDARY_DARK + FontSize 20 + BorderRoundCorner 8 + BorderThickness 1 + BackgroundColor $BGCOLOR +} + + +skinparam legend { + BackgroundColor $BGCOLOR + BorderColor $SECONDARY_DARK + FontColor $LIGHT +} + +!startsub swimlane +skinparam swimlane { + BorderColor $INFO + BorderThickness 2 + TitleBackgroundColor $SECONDARY_LIGHT-$SECONDARY + TitleFontColor $PRIMARY +} +!endsub + +!startsub activity + +skinparam activity { + $primary_scheme() + BarColor $SUCCESS + StartColor $INFO + EndColor $INFO + '' + DiamondBackgroundColor $BGCOLOR + DiamondBorderColor $SECONDARY_DARK + DiamondFontColor $SECONDARY_TEXT +} +!endsub + +!startsub participant + +skinparam participant { + $primary_scheme() + ParticipantBorderThickness 2 +} +!endsub + +!startsub actor + +skinparam actor { + $primary_scheme() + FontColor $PRIMARY +} +!endsub + +!startsub arrow + +skinparam arrow { + Thickness 3 + Color $PRIMARY + FontColor $FGCOLOR +} +!endsub + +!startsub sequence + +skinparam sequence { + BorderColor $PRIMARY + ' For some reason sequence title font color does not pick up from global + TitleFontColor $PRIMARY + BackgroundColor $BGCOLOR + StartColor $PRIMARY + EndColor $PRIMARY + '' + BoxBackgroundColor $BGCOLOR + BoxBorderColor $DARK + BoxFontColor $DARk + '' + LifeLineBorderColor $SECONDARY + LifeLineBorderThickness 2 + LifeLineBackgroundColor $BGCOLOR + '' + GroupBorderColor $DARK + GroupFontColor $DARK + GroupHeaderFontColor $INFO + GroupBackgroundColor $BGCOLOR + GroupHeaderBackgroundColor $BGCOLOR + '' + DividerBackgroundColor $BGCOLOR + DividerBorderColor $DARK + DividerBorderThickness 2 + DividerFontColor $LIGHT + '' + ReferenceBackgroundColor $BGCOLOR + ReferenceBorderColor $LIGHT + ReferenceFontColor $LIGHT + ReferenceHeaderFontColor $INFO + ReferenceHeaderBackgroundColor $BGCOLOR +} +!endsub + +!startsub partition + +skinparam partition { + BorderColor $PRIMARY + FontColor $PRIMARY + BackgroundColor $BGCOLOR +} +!endsub + +!startsub collections + +skinparam collections { + $primary_scheme() +} +!endsub + +!startsub control + +skinparam control { + $primary_scheme() +} +!endsub + +!startsub entity + +skinparam entity { + $primary_scheme() +} +!endsub + +!startsub boundary + +skinparam boundary { + $primary_scheme() +} +!endsub + +!startsub agent + +skinparam agent { + BackgroundColor $BGCOLOR + BorderColor $WARNING_LIGHT + FontColor $DARK +} +!endsub + +!startsub note + +skinparam note { + BorderThickness 1 + BackgroundColor $BGCOLOR + BorderColor $INFO_DARK + FontColor $INFO_DARK +} +!endsub + +!startsub artifact + +skinparam artifact { + BackgroundColor $BGCOLOR + BorderColor $DARK_DARK + FontColor $LIGHT +} +!endsub + +!startsub component + +skinparam component { + $primary_scheme() +} +!endsub + +!startsub interface + +skinparam interface { + BackgroundColor $BGCOLOR + BorderColor $DANGER + FontColor $DARK +} +!endsub + +!startsub storage + +skinparam storage { + BackgroundColor $BGCOLOR + BorderColor $WARNING_DARK + FontColor $WARNING_TEXT +} +!endsub + +!startsub node + +skinparam node { + BackgroundColor $BGCOLOR + BorderColor $LIGHT + FontColor $LIGHT +} +!endsub + +!startsub cloud + +skinparam cloud { + BackgroundColor $BGCOLOR + BorderColor #F2FCFE + FontColor $DARK +} +!endsub + +!startsub database + +skinparam database { + $primary_scheme() + FontColor $PRIMARY +} +!endsub + +!startsub class + +skinparam class { + $primary_scheme() + FontColor $LIGHT + HeaderBackgroundColor $PRIMARY_LIGHT + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $DARK + AttributeFontSize 11 +} +!endsub + +!startsub object + +skinparam object { + $primary_scheme() + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $SECONDARY_DARK + AttributeFontSize 11 +} +!endsub + +!startsub usecase + +skinparam usecase { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub rectangle + +skinparam rectangle { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub package + +skinparam package { + BackgroundColor $BGCOLOR + BorderColor $PRIMARY + FontColor $PRIMARY + BorderThickness 2 +} +!endsub + +!startsub folder + +skinparam folder { + BackgroundColor $BGCOLOR + BorderColor $WARNING + FontColor $WARNING + BorderThickness 2 +} +!endsub + +!startsub frame + +skinparam frame { + BackgroundColor $BGCOLOR + BorderColor $INFO + FontColor $INFO + BorderThickness 2 +} +!endsub + +!startsub state + +skinparam state { + $primary_scheme() + StartColor $INFO + EndColor $INFO + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub queue + +skinparam queue { + $primary_scheme() +} +!endsub + +!startsub card + +skinparam card { + BackgroundColor $BGCOLOR + BorderColor $INFO + FontColor $INFO_TEXT +} +!endsub + +!startsub file + +skinparam file { + BackgroundColor $BGCOLOR + BorderColor $LIGHT + FontColor $LIGHT +} +!endsub + +!startsub stack + +skinparam stack { + $primary_scheme() +} +!endsub diff --git a/themes/puml-theme-superhero.puml b/themes/puml-theme-superhero.puml new file mode 100644 index 000000000..60ac205ba --- /dev/null +++ b/themes/puml-theme-superhero.puml @@ -0,0 +1,440 @@ +'' +'' superhero theme based off of the bootstrap theme of the same name +'' https://bootswatch.com/superhero/ +'' +'' Author: Brett Schwarz +'' Copyright (c) 2019 by Brett Schwarz + +!$THEME = "superhero" + +!if %not(%variable_exists("$BGCOLOR")) +!$BGCOLOR = "transparent" +!endif + +skinparam backgroundColor $BGCOLOR +skinparam useBetaStyle false + +'' +'' Colors taken from the css file of the BS theme +'' +!$BLUE = "#DF691A" +!$INDIGO = "#6610f2" +!$PURPLE = "#6f42c1" +!$PINK = "#e83e8c" +!$RED = "#d9534f" +!$ORANGE = "#f0ad4e" +!$YELLOW = "#f0ad4e" +!$GREEN = "#5cb85c" +!$TEAL = "#20c997" +!$CYAN = "#5bc0de" +!$WHITE = "#FFF" +!$GRAY_LIGHT = "#222" +!$GRAY = "#868e96" +!$PRIMARY = "#DF691A" +!$SECONDARY = "#4E5D6C" +!$SUCCESS = "#5cb85c" +!$INFO = "#5bc0de" +!$WARNING = "#f0ad4e" +!$DANGER = "#d9534f" +!$LIGHT = "#abb6c2" +!$DARK = "#4E5D6C" + +'' *_DARK = tint (lighter) of the main color of 80% +'' where TINT is calculated by clr + (255-clr) * tint_factor +'' *_LIGHT = shade (darker) of the main color of 80% +'' and SHADE is calculated by clr * (1 - shade_factor) +'' +!$FGCOLOR = $WHITE +!$PRIMARY_DARK = "#e58748" +!$PRIMARY_LIGHT = "#b25415" +!$PRIMARY_TEXT = $WHITE +!$SECONDARY_DARK = "#717d89" +!$SECONDARY_LIGHT = "#3e4a56" +!$SECONDARY_TEXT = $WHITE +!$INFO_DARK = "#7ccde5" +!$INFO_LIGHT = "#499AB2" +!$INFO_TEXT = $WHITE +!$SUCCESS_DARK = "#4a934a" +!$SUCCESS_LIGHT = "#5F8F00" +!$SUCCESS_TEXT = $WHITE +!$WARNING_DARK = "#f3bd71" +!$WARNING_LIGHT = "#C08A3E" +!$WARNING_TEXT = $WHITE +!$DANGER_DARK = "#e17572" +!$DANGER_LIGHT = "#AE423F" +!$DANGER_TEXT = $WHITE +!$DARK_DARK = "#717d89" +!$DARK_LIGHT = "#3e4a56" +!$LIGHT_DARK = "#bcc5ce" +!$LIGHT_LIGHT = "#89929b" + +!procedure $success($msg) + $msg +!endprocedure + +!procedure $failure($msg) + $msg +!endprocedure + +!procedure $warning($msg) + $msg +!endprocedure + +!procedure $primary_scheme() + FontColor $PRIMARY_TEXT + BorderColor $PRIMARY_DARK + BackgroundColor $PRIMARY +!endprocedure + +'' +'' Global Default Values +'' +skinparam defaultFontName "Verdana" +skinparam defaultFontSize 12 +skinparam dpi 100 +skinparam shadowing false +skinparam roundcorner 8 +skinparam ParticipantPadding 40 +skinparam BoxPadding 40 +skinparam Padding 5 +skinparam ArrowColor $DARK +skinparam stereotype { + CBackgroundColor $SECONDARY_LIGHT + CBorderColor $SECONDARY_DARK + ABackgroundColor $SUCCESS_LIGHT + ABorderColor $SUCCESS_DARK + IBackgroundColor $DANGER_LIGHT + IBorderColor $DANGER_DARK + EBackgroundColor $WARNING_LIGHT + EBorderColor $WARNING_DARK + NBackgroundColor $INFO_LIGHT + NBorderColor $INFO_DARK +} +skinparam title { + FontColor $PRIMARY + BorderColor $SECONDARY_DARK + FontSize 20 + BorderRoundCorner 8 + BorderThickness 1 + BackgroundColor $SECONDARY_LIGHT-$SECONDARY +} + +skinparam legend { + BackgroundColor $SECONDARY + BorderColor $SECONDARY_DARK + FontColor $LIGHT +} + +!startsub swimlane +skinparam swimlane { + BorderColor $INFO + BorderThickness 2 + TitleBackgroundColor $SECONDARY_LIGHT-$SECONDARY + TitleFontColor $PRIMARY +} +!endsub + +!startsub activity + +skinparam activity { + $primary_scheme() + BarColor $SUCCESS + StartColor $INFO + EndColor $INFO + '' + DiamondBackgroundColor $SECONDARY_LIGHT + DiamondBorderColor $SECONDARY_DARK + DiamondFontColor $SECONDARY_TEXT +} +!endsub + +!startsub participant + +skinparam participant { + $primary_scheme() + BorderThickness 2 +} +!endsub + +!startsub actor + +skinparam actor { + $primary_scheme() +} +!endsub + +!startsub arrow + +skinparam arrow { + Thickness 3 + Color $PRIMARY + FontColor $FGCOLOR +} +!endsub + +!startsub sequence + +skinparam sequence { + BorderColor $PRIMARY + ' For some reason sequence title font color does not pick up from global + TitleFontColor $PRIMARY + BackgroundColor $BGCOLOR + StartColor $PRIMARY + EndColor $PRIMARY + '' + BoxBackgroundColor $BGCOLOR + BoxBorderColor $DARK + BoxFontColor $DARk + '' + LifeLineBorderColor $SECONDARY + LifeLineBorderThickness 2 + LifeLineBackgroundColor $SECONDARY_DARK + '' + GroupBackgroundColor $SECONDARY + GroupBorderColor $DARK + GroupFontColor $DARK + GroupHeaderFontColor $INFO + GroupHeaderBackgroundColor $BGCOLOR + '' + DividerBackgroundColor $DARK + DividerBorderColor $DARK + DividerBorderThickness 2 + DividerFontColor $LIGHT + '' + ReferenceBackgroundColor $BGCOLOR + ReferenceBorderColor $DARK + ReferenceFontColor $DARK + ReferenceHeaderFontColor $INFO + ReferenceHeaderBackgroundColor $SECONDARY +} +!endsub + +!startsub partition + +skinparam partition { + BorderColor $PRIMARY + FontColor $PRIMARY + BackgroundColor $BGCOLOR +} +!endsub + +!startsub collections + +skinparam collections { + $primary_scheme() +} +!endsub + +!startsub control + +skinparam control { + $primary_scheme() +} +!endsub + +!startsub entity + +skinparam entity { + $primary_scheme() +} +!endsub + +!startsub boundary + +skinparam boundary { + $primary_scheme() +} +!endsub + +!startsub agent + +skinparam agent { + BackgroundColor $WARNING + BorderColor $WARNING_LIGHT + FontColor $DARK +} +!endsub + +!startsub note + +skinparam note { + BorderThickness 1 + BackgroundColor $INFO + BorderColor $INFO_DARK + FontColor $WHITE +} +!endsub + +!startsub artifact + +skinparam artifact { + BackgroundColor $DARK + BorderColor $DARK_DARK + FontColor $LIGHT +} +!endsub + +!startsub component + +skinparam component { + $primary_scheme() +} +!endsub + +!startsub interface + +skinparam interface { + BackgroundColor $DANGER_DARK + BorderColor $DANGER + FontColor $DARK +} +!endsub + +!startsub storage + +skinparam storage { + BackgroundColor $WARNING + BorderColor $WARNING_DARK + FontColor $WARNING_TEXT +} +!endsub + +!startsub node + +skinparam node { + BackgroundColor $SECONDARY + BorderColor $LIGHT + FontColor $LIGHT +} +!endsub + +!startsub cloud + +skinparam cloud { + BackgroundColor $LIGHT-black + BorderColor $LIGHT + FontColor $DARK +} +!endsub + +!startsub database + +skinparam database { + $primary_scheme() +} +!endsub + +!startsub class + +skinparam class { + $primary_scheme() + HeaderBackgroundColor $PRIMARY_LIGHT + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $DARK + AttributeFontSize 11 +} +!endsub + +!startsub object + +skinparam object { + $primary_scheme() + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub usecase + +skinparam usecase { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub rectangle + +skinparam rectangle { + $primary_scheme() + BackgroundColor $SECONDARY_LIGHT + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub package + +skinparam package { + BackgroundColor $SECONDARY + BorderColor $PRIMARY + FontColor $PRIMARY + BorderThickness 2 +} +!endsub + +!startsub folder + +skinparam folder { + BackgroundColor $SECONDARY_LIGHT + BorderColor $WARNING + FontColor $WARNING + BorderThickness 2 +} +!endsub + +!startsub frame + +skinparam frame { + BackgroundColor $SECONDARY_LIGHT + BorderColor $INFO + FontColor $INFO + BorderThickness 2 +} +!endsub + +!startsub state + +skinparam state { + $primary_scheme() + StartColor $INFO + EndColor $INFO + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub queue + +skinparam queue { + $primary_scheme() +} +!endsub + +!startsub card + +skinparam card { + BackgroundColor $INFO + BorderColor $INFO_DARK + FontColor $INFO_TEXT +} +!endsub + +!startsub file + +skinparam file { + BackgroundColor $SECONDARY_DARK + BorderColor $LIGHT + FontColor $LIGHT +} +!endsub + +!startsub stack + +skinparam stack { + $primary_scheme() +} +!endsub diff --git a/themes/puml-theme-united.puml b/themes/puml-theme-united.puml new file mode 100644 index 000000000..b6665c0ea --- /dev/null +++ b/themes/puml-theme-united.puml @@ -0,0 +1,441 @@ +'' +'' superhero theme based off of the bootstrap theme of the same name +'' https://bootswatch.com/united/ +'' +'' Author = "Brett Schwarz +'' Copyright (c) 2020 by Brett Schwarz + +!$THEME = "united" + +!if %not(%variable_exists("$BGCOLOR")) +!$BGCOLOR = "transparent" +!endif + +skinparam backgroundColor $BGCOLOR +skinparam useBetaStyle false + +'' +'' Colors taken from the css file of the BS theme +'' +!$BLUE = "#007bff" +!$INDIGO = "#6610f2" +!$PURPLE = "#772953" +!$PINK = "#e83e8c" +!$RED = "#df382c" +!$ORANGE = "#e95420" +!$YELLOW = "#efb73e" +!$GREEN = "#38b44a" +!$TEAL = "#20c997" +!$CYAN = "#17a2b8" +!$WHITE = "#fff" +!$GRAY = "#868e96" +!$GRAYDARK = "#333" +!$PRIMARY = "#e95420" +!$SECONDARY = "#aea79f" +!$SUCCESS = "#38b44a" +!$INFO = "#17a2b8" +!$WARNING = "#efb73e" +!$DANGER = "#df382c" +!$LIGHT = "#e9ecef" +!$DARK = "#772953" + +'' *_DARK = tint (lighter) of the main color of 80% +'' where TINT is calculated by clr + (255-clr) * tint_factor +'' *_LIGHT = shade (darker) of the main color of 80% +'' and SHADE is calculated by clr * (1 - shade_factor) +'' +!$FGCOLOR = $WHITE +!$PRIMARY_DARK = "#d24c1d" +!$PRIMARY_LIGHT = "#eb6536" +!$PRIMARY_TEXT = $WHITE +!$SECONDARY_DARK = "#9d968f" +!$SECONDARY_LIGHT = "#b6b0a9" +!$SECONDARY_TEXT = $WHITE +!$INFO_DARK = "#1592a6" +!$INFO_LIGHT = "#2eabbf" +!$INFO_TEXT = $WHITE +!$SUCCESS_DARK = "#32a243" +!$SUCCESS_LIGHT = "#4cbc5c" +!$SUCCESS_TEXT = $WHITE +!$WARNING_DARK = "#d7a538" +!$WARNING_LIGHT = "#f1be51" +!$WARNING_TEXT = $WHITE +!$DANGER_DARK = "#c93228" +!$DANGER_LIGHT = "#e24c41" +!$DANGER_TEXT = $WHITE +!$DARK_DARK = "#6b254b" +!$DARK_LIGHT = "#853e64" +!$LIGHT_DARK = "#d2d4d7" +!$LIGHT_LIGHT = "#ebeef1" + +!procedure $success($msg) + $msg +!endprocedure + +!procedure $failure($msg) + $msg +!endprocedure + +!procedure $warning($msg) + $msg +!endprocedure + +!procedure $primary_scheme() + FontColor $PRIMARY_TEXT + BorderColor $PRIMARY_DARK + BackgroundColor $PRIMARY +!endprocedure + +'' +'' Global Default Values +'' +skinparam defaultFontName "Verdana" +skinparam defaultFontSize 12 +skinparam dpi 100 +skinparam shadowing false +skinparam roundcorner 8 +skinparam ParticipantPadding 40 +skinparam BoxPadding 40 +skinparam Padding 5 +skinparam ArrowColor $DARK +skinparam stereotype { + CBackgroundColor $SECONDARY_LIGHT + CBorderColor $SECONDARY_DARK + ABackgroundColor $SUCCESS_LIGHT + ABorderColor $SUCCESS_DARK + IBackgroundColor $DANGER_LIGHT + IBorderColor $DANGER_DARK + EBackgroundColor $WARNING_LIGHT + EBorderColor $WARNING_DARK + NBackgroundColor $INFO_LIGHT + NBorderColor $INFO_DARK +} +skinparam title { + FontColor $PRIMARY + BorderColor $SECONDARY_DARK + FontSize 20 + BorderRoundCorner 8 + BorderThickness 1 + BackgroundColor $SECONDARY_LIGHT-$SECONDARY +} + +skinparam legend { + BackgroundColor $SECONDARY + BorderColor $SECONDARY_DARK + FontColor $LIGHT +} + +!startsub swimlane +skinparam swimlane { + BorderColor $INFO + BorderThickness 2 + TitleBackgroundColor $SECONDARY_LIGHT-$SECONDARY + TitleFontColor $PRIMARY +} +!endsub + +!startsub activity + +skinparam activity { + $primary_scheme() + BarColor $SUCCESS + StartColor $INFO + EndColor $INFO + '' + DiamondBackgroundColor $SECONDARY_LIGHT + DiamondBorderColor $SECONDARY_DARK + DiamondFontColor $SECONDARY_TEXT +} +!endsub + +!startsub participant + +skinparam participant { + $primary_scheme() + ParticipantBorderThickness 2 +} +!endsub + +!startsub actor + +skinparam actor { + $primary_scheme() +} +!endsub + +!startsub arrow + +skinparam arrow { + Thickness 3 + Color $PRIMARY + FontColor $FGCOLOR +} +!endsub + +!startsub sequence + +skinparam sequence { + BorderColor $PRIMARY + ' For some reason sequence title font color does not pick up from global + TitleFontColor $PRIMARY + BackgroundColor $BGCOLOR + StartColor $PRIMARY + EndColor $PRIMARY + '' + BoxBackgroundColor $BGCOLOR + BoxBorderColor $DARK + BoxFontColor $DARk + '' + LifeLineBorderColor $SECONDARY + LifeLineBorderThickness 2 + LifeLineBackgroundColor $SECONDARY_DARK + '' + GroupBorderColor $DARK + GroupFontColor $DARK + GroupHeaderFontColor $INFO + GroupBackgroundColor $SECONDARY + GroupHeaderBackgroundColor $BGCOLOR + '' + DividerBackgroundColor $DARK + DividerBorderColor $DARK + DividerBorderThickness 2 + DividerFontColor $LIGHT + '' + ReferenceBackgroundColor $BGCOLOR + ReferenceBorderColor $DARK + ReferenceFontColor $DARK + ReferenceHeaderFontColor $INFO + ReferenceHeaderBackgroundColor $SECONDARY +} +!endsub + +!startsub partition + +skinparam partition { + BorderColor $PRIMARY + FontColor $PRIMARY + BackgroundColor $BGCOLOR +} +!endsub + +!startsub collections + +skinparam collections { + $primary_scheme() +} +!endsub + +!startsub control + +skinparam control { + $primary_scheme() +} +!endsub + +!startsub entity + +skinparam entity { + $primary_scheme() +} +!endsub + +!startsub boundary + +skinparam boundary { + $primary_scheme() +} +!endsub + +!startsub agent + +skinparam agent { + BackgroundColor $WARNING + BorderColor $WARNING_LIGHT + FontColor $DARK +} +!endsub + +!startsub note + +skinparam note { + BorderThickness 1 + BackgroundColor $INFO + BorderColor $INFO_DARK + FontColor $WHITE +} +!endsub + +!startsub artifact + +skinparam artifact { + BackgroundColor $DARK + BorderColor $DARK_DARK + FontColor $LIGHT +} +!endsub + +!startsub component + +skinparam component { + $primary_scheme() +} +!endsub + +!startsub interface + +skinparam interface { + BackgroundColor $DANGER_DARK + BorderColor $DANGER + FontColor $DARK +} +!endsub + +!startsub storage + +skinparam storage { + BackgroundColor $WARNING + BorderColor $WARNING_DARK + FontColor $WARNING_TEXT +} +!endsub + +!startsub node + +skinparam node { + BackgroundColor $SECONDARY + BorderColor $LIGHT + FontColor $LIGHT +} +!endsub + +!startsub cloud + +skinparam cloud { + BackgroundColor #F2FCFE-#eeeeee + BorderColor #F2FCFE + FontColor $DARK +} +!endsub + +!startsub database + +skinparam database { + $primary_scheme() +} +!endsub + +!startsub class + +skinparam class { + $primary_scheme() + HeaderBackgroundColor $PRIMARY_LIGHT + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $DARK + AttributeFontSize 11 +} +!endsub + +!startsub object + +skinparam object { + $primary_scheme() + StereotypeFontColor $DARK + BorderThickness 1 + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub usecase + +skinparam usecase { + $primary_scheme() + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub rectangle + +skinparam rectangle { + $primary_scheme() + BackgroundColor $SECONDARY_LIGHT + BorderThickness 2 + StereotypeFontColor $PRIMARY +} +!endsub + +!startsub package + +skinparam package { + BackgroundColor $SECONDARY + BorderColor $PRIMARY + FontColor $PRIMARY + BorderThickness 2 +} +!endsub + +!startsub folder + +skinparam folder { + BackgroundColor $SECONDARY_LIGHT + BorderColor $WARNING + FontColor $WARNING + BorderThickness 2 +} +!endsub + +!startsub frame + +skinparam frame { + BackgroundColor $SECONDARY_LIGHT + BorderColor $INFO + FontColor $INFO + BorderThickness 2 +} +!endsub + +!startsub state + +skinparam state { + $primary_scheme() + BackgroundColor $PRIMARY_LIGHT + StartColor $INFO + EndColor $INFO + AttributeFontColor $SECONDARY_TEXT + AttributeFontSize 11 +} +!endsub + +!startsub queue + +skinparam queue { + $primary_scheme() +} +!endsub + +!startsub card + +skinparam card { + BackgroundColor $INFO + BorderColor $INFO_DARK + FontColor $INFO_TEXT +} +!endsub + +!startsub file + +skinparam file { + BackgroundColor $SECONDARY_DARK + BorderColor $LIGHT + FontColor $LIGHT +} +!endsub + +!startsub stack + +skinparam stack { + $primary_scheme() +} +!endsub