diff --git a/pom.xml b/pom.xml
index 8c7b76ac0..2cc735b18 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,7 +35,7 @@
net.sourceforge.plantuml
plantuml
- 1.2020.9-SNAPSHOT
+ 1.2020.9
jar
PlantUML
@@ -75,9 +75,9 @@
- scm:svn:svn://svn.code.sf.net/p/plantuml/code/trunk
- scm:svn:https://svn.code.sf.net/p/plantuml/code/trunk
- svn://svn.code.sf.net/p/plantuml/code/trunk
+ scm:svn:svn://svn.code.sf.net/p/plantuml/code/tags/plantuml-1.2020.9
+ scm:svn:https://svn.code.sf.net/p/plantuml/code/tags/plantuml-1.2020.9
+ svn://svn.code.sf.net/p/plantuml/code/tags/plantuml-1.2020.9
diff --git a/skin/plantuml.skin b/skin/plantuml.skin
index 18c83365f..ebe7fe99f 100644
--- a/skin/plantuml.skin
+++ b/skin/plantuml.skin
@@ -13,6 +13,10 @@ root {
Shadowing 0.0
}
+document {
+ BackGroundColor White
+}
+
stereotype {
FontStyle italic
}
diff --git a/src/net/sourceforge/plantuml/code/ByteArray.java b/src/net/sourceforge/plantuml/code/ByteArray.java
index e03c34c0e..c218c6a8a 100644
--- a/src/net/sourceforge/plantuml/code/ByteArray.java
+++ b/src/net/sourceforge/plantuml/code/ByteArray.java
@@ -57,7 +57,7 @@ public class ByteArray {
}
public String toUPF9String() throws IOException {
- return Upf9.decodeString(data, length);
+ return Upf9Decoder.decodeString(data, length);
}
public int getByteAt(int i) {
diff --git a/src/net/sourceforge/plantuml/code/Keywords.java b/src/net/sourceforge/plantuml/code/Tokens.java
similarity index 72%
rename from src/net/sourceforge/plantuml/code/Keywords.java
rename to src/net/sourceforge/plantuml/code/Tokens.java
index 8a585b8d3..5b12fd165 100644
--- a/src/net/sourceforge/plantuml/code/Keywords.java
+++ b/src/net/sourceforge/plantuml/code/Tokens.java
@@ -40,28 +40,35 @@ import java.util.List;
import java.util.Set;
import java.util.TreeSet;
-public class Keywords {
+public class Tokens {
private final List keywords = new ArrayList();
public static void main(String[] args) {
- System.err.println("keywords=" + new Keywords().keywords.size());
- final Set sorted = new TreeSet(new Keywords().keywords);
+ System.err.println("keywords=" + new Tokens().keywords.size());
+ final Set sorted = new TreeSet(new Tokens().keywords);
for (String s : sorted) {
System.err.println(s);
}
}
- public String compress(String s) {
+ public String compressUnicodeE000(String s) {
for (int i = 0; i < keywords.size(); i++) {
final char c = (char) ('\uE000' + i);
s = s.replace(keywords.get(i), "" + c);
}
return s;
-
}
- public Keywords() {
+ public String compressAscii128(String s) {
+ for (int i = 0; i < keywords.size(); i++) {
+ final char c = (char) (128 + i);
+ s = s.replace(keywords.get(i), "" + c);
+ }
+ return s;
+ }
+
+ public Tokens() {
add("actor");
add("participant");
add("usecase");
@@ -145,37 +152,64 @@ public class Keywords {
add("stereotype");
add("split");
add("style");
+ add("sprite");
- add("!exit");
- add("!include");
- add("!pragma");
- add("!undef");
- add("!ifdef");
- add("!endif");
- add("!ifndef");
- add("!else");
- add("!function");
- add("!procedure");
- add("!endfunction");
- add("!endprocedure");
- add("!unquoted");
- add("!return");
- add("!startsub");
- add("!endsub");
- add("!assert");
- add("!local");
+ add("exit");
+ add("include");
+ add("pragma");
+ add("undef");
+ add("ifdef");
+ // add("endif");
+ add("ifndef");
+ // add("else");
+ add("function");
+ add("procedure");
+ add("endfunction");
+ add("endprocedure");
+ add("unquoted");
+ // add("return");
+ add("startsub");
+ add("endsub");
+ add("assert");
+ add("local");
+
+ add("!definelong");
+ add("!enddefinelong");
+ add("!define");
+
+ add("define");
+ add("alias");
+ add("shape");
+ add("label");
+ add("BackgroundColor");
+ add("Color");
+ add("color");
+ add("Entity");
+ add("ENTITY");
+ add("COLOR");
+ add("LARGE");
+ add("stereo");
+ add("AZURE");
+ add("Azure");
}
private void add(String string) {
if (keywords.contains(string)) {
+ System.err.println(string);
throw new IllegalArgumentException(string);
}
if (string.length() <= 3) {
+ System.err.println(string);
+ throw new IllegalArgumentException(string);
+ }
+ if (string.matches("[!@]?[A-Za-z]+") == false) {
+ System.err.println(string);
throw new IllegalArgumentException(string);
}
keywords.add(string);
if (keywords.size() > 127) {
+ System.err.println(string);
throw new IllegalArgumentException();
}
}
diff --git a/src/net/sourceforge/plantuml/code/TranscoderImpl.java b/src/net/sourceforge/plantuml/code/TranscoderImpl.java
index 38e7e156c..81980a807 100644
--- a/src/net/sourceforge/plantuml/code/TranscoderImpl.java
+++ b/src/net/sourceforge/plantuml/code/TranscoderImpl.java
@@ -70,7 +70,7 @@ public class TranscoderImpl implements Transcoder {
if (format == Format.UTF8)
data = stringAnnoted.getBytes("UTF-8");
else
- data = Upf9.getBytes(stringAnnoted);
+ data = Upf9Encoder.getBytes(stringAnnoted);
final byte[] compressedData = compression.compress(data);
diff --git a/src/net/sourceforge/plantuml/code/Upf9Decoder.java b/src/net/sourceforge/plantuml/code/Upf9Decoder.java
new file mode 100644
index 000000000..d5c301f81
--- /dev/null
+++ b/src/net/sourceforge/plantuml/code/Upf9Decoder.java
@@ -0,0 +1,85 @@
+/* ========================================================================
+ * 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.code;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+public class Upf9Decoder {
+
+ private Upf9Decoder() {
+ }
+
+ static int decodeChar(InputStream is) throws IOException {
+ final int read0 = is.read();
+ if (read0 == -1) {
+ return -1;
+ }
+ if (read0 == 0x0B) {
+ final int read1 = is.read();
+ if (read1 >= 0x80)
+ return (char) read1;
+ return (char) ((0xE0 << 8) + read1);
+ }
+ if (read0 == 0x0C) {
+ final int read1 = is.read();
+ final int read2 = is.read();
+ return (char) ((read1 << 8) + read2);
+ }
+ if (read0 >= 0x01 && read0 <= 0x08) {
+ final int read1 = is.read();
+ return (char) ((read0 << 8) + read1);
+ }
+ if (read0 >= 0x80 && read0 <= 0xFF) {
+ final int read1 = is.read();
+ return (char) (((read0 - 0x60) << 8) + read1);
+ }
+ return (char) read0;
+ }
+
+ public static String decodeString(byte[] data, int length) throws IOException {
+ final ByteArrayInputStream bais = new ByteArrayInputStream(data, 0, length);
+ final StringBuilder result = new StringBuilder();
+ int read;
+ while ((read = decodeChar(bais)) != -1) {
+ result.append((char) read);
+ }
+ bais.close();
+ return result.toString();
+ }
+
+}
diff --git a/src/net/sourceforge/plantuml/code/Upf9.java b/src/net/sourceforge/plantuml/code/Upf9Encoder.java
similarity index 61%
rename from src/net/sourceforge/plantuml/code/Upf9.java
rename to src/net/sourceforge/plantuml/code/Upf9Encoder.java
index 6cb5e5bf6..6da4e15b8 100644
--- a/src/net/sourceforge/plantuml/code/Upf9.java
+++ b/src/net/sourceforge/plantuml/code/Upf9Encoder.java
@@ -38,11 +38,10 @@ package net.sourceforge.plantuml.code;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import java.io.InputStream;
-public class Upf9 {
+public class Upf9Encoder {
- private Upf9() {
+ private Upf9Encoder() {
}
@@ -54,7 +53,7 @@ public class Upf9 {
private static boolean checkBack(char c, byte[] result) {
try {
- if (c == decodeChar(new ByteArrayInputStream(result)))
+ if (c == Upf9Decoder.decodeChar(new ByteArrayInputStream(result)))
return true;
} catch (IOException e) {
e.printStackTrace();
@@ -64,67 +63,36 @@ public class Upf9 {
private static byte[] encodeCharInternal(char c) {
if (c == '\n' || c == '\r' || c == '\t') {
+ // Using regular ASCII code for and
+ return new byte[] { (byte) c };
+ }
+ if (c >= '\u000E' && c <= '\u0012') {
return new byte[] { (byte) c };
}
if (c >= '\u0020' && c <= '\u007E') {
+ // Using regular ASCII code for ASCII printable char
return new byte[] { (byte) c };
}
if (c >= '\u0080' && c <= '\u00FF') {
+ // Char from to are encoded as [0x0B 0x80] to [0x0B 0xFF]
return new byte[] { 0x0B, (byte) c };
}
if (c >= '\u0100' && c <= '\u08FF') {
+ // Char from to are encoded as [0x01 0x00] to [0x08 0xFF]
return new byte[] { highByte(c), lowByte(c) };
}
- if (c >= '\u0900' && c <= '\u10FF') {
- return new byte[] { (byte) (5 + highByte(c)), lowByte(c) };
- }
- if (c >= '\u1900' && c <= '\u1FFF') {
- return new byte[] { (byte) (-3 + highByte(c)), lowByte(c) };
- }
if (c >= '\u2000' && c <= '\u9FFF') {
- return new byte[] { (byte) (96 + highByte(c)), lowByte(c) };
+ // Char from to are encoded as [0x80 0x00] to [0xFF 0xFF]
+ return new byte[] { (byte) (0x60 + highByte(c)), lowByte(c) };
}
if (c >= '\uE000' && c <= '\uE07F') {
+ // Char from to are encoded as [0x0B 0x00] to [0x0B 0x7F]
return new byte[] { 0x0B, lowByte(c) };
}
+ // All other char are encoded on 3 bytes, starting with 0x0C
return new byte[] { 0x0C, highByte(c), lowByte(c) };
}
- static int decodeChar(InputStream is) throws IOException {
- final int read0 = is.read();
- if (read0 == -1) {
- return -1;
- }
- if (read0 == 0x0B) {
- final int read1 = is.read();
- if (read1 >= 0x80)
- return (char) read1;
- return (char) ((0xE0 << 8) + read1);
- }
- if (read0 == 0x0C) {
- final int read1 = is.read();
- final int read2 = is.read();
- return (char) ((read1 << 8) + read2);
- }
- if (read0 >= 0x01 && read0 <= 0x08) {
- final int read1 = is.read();
- return (char) ((read0 << 8) + read1);
- }
- if (read0 >= 0x0E && read0 <= 0x15) {
- final int read1 = is.read();
- return (char) (((read0 - 5) << 8) + read1);
- }
- if (read0 >= 0x16 && read0 <= 0x1C) {
- final int read1 = is.read();
- return (char) (((read0 + 3) << 8) + read1);
- }
- if (read0 >= 0x80 && read0 <= 0xFF) {
- final int read1 = is.read();
- return (char) (((read0 - 96) << 8) + read1);
- }
- return (char) read0;
- }
-
private static byte lowByte(char c) {
return (byte) (c & 0x00FF);
}
@@ -139,18 +107,9 @@ public class Upf9 {
baos.write(encodeChar(s.charAt(i)));
}
baos.close();
- return baos.toByteArray();
- }
-
- public static String decodeString(byte[] data, int length) throws IOException {
- final ByteArrayInputStream bais = new ByteArrayInputStream(data, 0, length);
- final StringBuilder result = new StringBuilder();
- int read;
- while ((read = decodeChar(bais)) != -1) {
- result.append((char) read);
- }
- bais.close();
- return result.toString();
+ final byte[] result = baos.toByteArray();
+ assert s.endsWith(Upf9Decoder.decodeString(result, result.length));
+ return result;
}
}
diff --git a/src/net/sourceforge/plantuml/donors/PSystemDonors.java b/src/net/sourceforge/plantuml/donors/PSystemDonors.java
index 9746892df..25a16ebcf 100644
--- a/src/net/sourceforge/plantuml/donors/PSystemDonors.java
+++ b/src/net/sourceforge/plantuml/donors/PSystemDonors.java
@@ -72,25 +72,25 @@ public class PSystemDonors extends AbstractPSystem {
private static final int COLS = 6;
private static final int FREE_LINES = 6;
- public static final String DONORS = "6qmB02mFUBXRGOc9nbfsvvsjZ8ybZ2OHBCyJYiF08fxk1iGVuDxfSR-H_YAwqhrlcX5jsPhYF6E8M13q"
- + "U9fSCsnpRmyyvfxff-Ixcz4JPiBaVmA4fYcNj0L8bI4b-FUTh_mIz0xls23HNANHuiWzilk5zpV3UUuq"
- + "Fdhf6V08LJz5zxN_Dvr8N1uAOPPcAup1g6Y4sXSuHUTOxlzJgKkZsdrNHNMhAiTqwk8OhWeRqDK9ZmMh"
- + "cLguQvnNXoQZOhARI8cqHWaHepD3JqvgNo47CaZyKJz0XyqLbehS4uhBA4bqVJrtPDj0ymiIBuLWY0MR"
- + "1-PGok7TeCIv4ICH5453rofwOnkEB7dYWY4EBUpX7utaY4SgiwQZHIBa4IY8U1e79BrGZoOnExqOK7ra"
- + "j1Yn95LNnqsuVnuMKhGs6ku1Yn0BpW9g2F8cTCEdnwgF9lTnDTJmLvucUQjMXpfaou2s6T6t-6YIA9-p"
- + "JJD7N3NA5gdEKPzZlEOHaBkbLixuCkeevnBSv-vT3UiVBP0VWPwhYKhoPyw5XIJ4TPHzaAvp-vL7By8b"
- + "6p9DhCitiOKQVR4hMTcCB3l8GfxEhwjDo60BNRay33sfLPzcdI-qfANr-qMFfetx9DRKc-4Tf_THDXVv"
- + "_ztkPMOeJj2P4hEewm65CPjMmyM68ZWjT6t8JK2kG7bptOgRrqN-gW-8ta96878R9RqGxu-Kkov2JCUg"
- + "xaWn0fW_fPoRHDY62CtQ1JsDAgL8MU_sE5qzovUDkUUa3wvdZSOeZkcanYPyyowuks6zgZVJpThdM5Fm"
- + "7A_BlEfUK_qgjhFDlHTyIAs_O23EzCw8IDKHZMqh_oZShQD45cl9rRfyL_U3WuVkNt06YpOneyrsoF9G"
- + "k9oCC_KhmqzB1jufokRztjxa5IJk2XiX71dDuFhHv96QN28Hj9pb-DW445MBL-nA2QSBLREiL8wmAIPF"
- + "Nxq8cU1toIUmLDw5fnjhpJqepX14GPsOzyAgRVqwrBmje9OS9YX92wL6gYdIro8PcAlJiz4wsFwqu8An"
- + "ZKTLh06ARvlehCO6ZLDWkeZmYmQUI0go4hta9370V_tyIZtIry77TqNvZ3X8JfV442f8TSQ5KzFuUHbM"
- + "ndgBlbzlRVSA_lnx7UtWr1lt-XH1z00Y_k-a08vo4YDu6lXxv2F1MmUhHeysYiJAGqfl1X8MxCSxiwYd"
- + "XXcDEp6Zt99Sz8hjGzN_TdAVM2o6sB3yefIc6B7afBVTkbEbRD__nk8W1yFVHPKvcLpbqXeOqIYsjnUd"
- + "E7ORPRZBQWLuK1sN2QpzwhTcbZUDkUvOgXkU8VBJ4JbLz70jhAbfyzWCR1TZVczfFvNfyP-Cw9VIcXvx"
- + "zJ1yK7vFdGADt_PG-WqZmO18tJ5WD_SvcO4xtd382rDpKjF5CYiNtTVj0i4A-ysyH1OJNjdMAfUmrXvU"
- + "S_7jNPxTTkQmBMIVgKRJ2qKLCGEPN6pHtOc5Ki03gI05S_QMYIBI3dg3Opq3y105n_jx1k5eiNczPftZ" + "6Gq0";
+ public static final String DONORS = "6rWB02mFUBXRGOc9nbfsvvsjZ9-86KqYM9ud58U1HJpT3OW_mBtJutuZ_KLqfNlVD2FQiZN5USOGiI3e"
+ + "yJIvPjZctXu8Sw9y2FxT21uW0qH9r4QrBFUas6sRAaDAyEyxN_abw1tUiK6YkKgZnP5xPFSBxs-6ytpJ"
+ + "67hf6R0ygdwAxcl_T-agw_AgAipItGgCmAZJ2DLvIp77TFz7WJjEmKvGHOybntGgvpeSggY0LoSy1XPf"
+ + "1ZUFyshKP5HCQXCfaTOe8s9q9hJcfFPPiY63n2_r0xpPN66fu4meZb4IT7qzjtVRGFFB95v4mH0B3WlC"
+ + "ePJ3kq3nSoD18YX0eNaMlR6L1qkUk61H2YtimnyQoO57AfdJqI8HyW0A8fx11P9Ug5KJpaui1bGHoHQz"
+ + "bgJgqdY8T5o7vIczDXhk0OiG2yu2QWZoF-Y2JuzL7qsTusfe9FKqoLkrTQXVYVVGDYFwfXvD4jLdVzFC"
+ + "4NU1iaMgQwlFCLxp2CZTKYkl-3BgoEO0pxvxLvFrZnR8Zq2trKGj-RFi2mi9Y6ih-o1TvuQBHo_2CHio"
+ + "JQpZTxFjDVs5hbXbep9MW4L-EhykDI715heoUGHwGgk2PfrFDDBI-lsYnvUD-uHhAYpk7Q3tKJRd-V_T"
+ + "xcLcA0xGqJApeEiHAihLjEefjY22Cq8NXjm4oHKuRwxRSVEwoA_wWE3DPGJYi26qGRm-Gkcw569rhEh6"
+ + "D2E0sTFAkKY4BH5GertGlQYIYPJrRe_JrPc-RCpS9trmtMymHd5C9pGMaRjt8JqCArIZMT-iVKXp2gxo"
+ + "EiwhxZNUhsBRty9xqeVq_2C3VgPt1YBbHposhVoZIBUEYbcifMxMvRkw7nmyTCU2CrYqX1bjjaEcGU5i"
+ + "CixKhqn-MZBy7OUivlU6PgyWUYTiX0Wpci7jhSarDRbC8cWwo_6n2uWYjNZ5hhXm1qBTB2l55ZR5oZDM"
+ + "Zq92ViTyWaZbNJYjM6lk9ZmZUnJKuRmxLYthrw6MRG7LvZ11HbgeQgIQ8tqja85hTNeMMmVRdnPOCBRn"
+ + "g8eLX-8x9jgltA1W2imKuNvH48boGLfABp59JE1__lnAFRclWutlZFB9E4ZsaCH05N9rnechfe7p65R6"
+ + "Ues_Nszjzmh-_7iTRN9gYsT-YY1w3fBZtqbnp8LIrl4qobzdmsB08LPmqKR1bLkMtWmaBDY1TsPHZmyp"
+ + "6ZSnMMvQBdh5zg4gVZkv0HVp8JRikCYaEKOikTBRRZseuhRlU6Dna8FYxwBAk4okSlKQ654WjhuN9prs"
+ + "6sLuoYe5M50Tjmci_Ugtqonl6dFUeLGtN0RopO6SAlK8BQofQSrO26mGOtvlOJ-LzFXF1lh5jTQFlNhe"
+ + "EQYyXtU3Xczxa7x6I31S9EsOeBVqEPc1XsyOv8svEV7fOicLYsuOTe5WXVr6NoOB2I_iQ9LBDDSUNdFw"
+ + "vLtEQZjow1QoZrQZ-OMYYfY1N5YirTM9XLAE1r8a1NFsbl42QGUzmIKz0JX5mV7-xaCulT3yY6RjuncD" + "OgwA2G00";
/*
* Special thanks to our sponsors and donors:
diff --git a/src/net/sourceforge/plantuml/graphic/QuoteUtils.java b/src/net/sourceforge/plantuml/graphic/QuoteUtils.java
index 6601be055..164010cbc 100644
--- a/src/net/sourceforge/plantuml/graphic/QuoteUtils.java
+++ b/src/net/sourceforge/plantuml/graphic/QuoteUtils.java
@@ -267,7 +267,8 @@ public class QuoteUtils {
"Gunax lbh sbe pubbfvat Bprnavp Nveyvarf", "4-8-15-16-23-42",
"...naq gnk phgf. Gung'yy fubj gurz znegvnaf.",
"Jurarire V srry gur arrq gb rkrepvfr, V yvr qbja hagvy vg tbrf njnl", "Ernyvgl pbagvahrf gb ehva zl yvsr",
- "Vs lbh gvpxyr hf, qb jr abg ynhtu?", "V xabj n HQC wbxr, ohg lbh zvtug abg trg vg");
+ "Vs lbh gvpxyr hf, qb jr abg ynhtu?", "V xabj n HQC wbxr, ohg lbh zvtug abg trg vg",
+ "Chvfdhr prf zlfgrerf abhf qrcnffrag, srvtabaf q'ra rger y'betnavfngrhe.");
private QuoteUtils() {
}
diff --git a/src/net/sourceforge/plantuml/preproc/ImportedFiles.java b/src/net/sourceforge/plantuml/preproc/ImportedFiles.java
index cfe99179c..dfe7dbf6b 100644
--- a/src/net/sourceforge/plantuml/preproc/ImportedFiles.java
+++ b/src/net/sourceforge/plantuml/preproc/ImportedFiles.java
@@ -51,7 +51,6 @@ import net.sourceforge.plantuml.OptionFlags;
public class ImportedFiles {
- private static final List INCLUDE_PATH = FileSystem.getPath("plantuml.include.path", true);
private final List imported;
private final AParentFolder currentDir;
@@ -107,11 +106,15 @@ public class ImportedFiles {
public List getPath() {
final List result = new ArrayList(imported);
- result.addAll(INCLUDE_PATH);
+ result.addAll(includePath());
result.addAll(FileSystem.getPath("java.class.path", true));
return result;
}
+ private List includePath() {
+ return FileSystem.getPath("plantuml.include.path", true);
+ }
+
private boolean isAbsolute(String nameOrPath) {
final File f = new File(nameOrPath);
return f.isAbsolute();
@@ -148,8 +151,9 @@ public class ImportedFiles {
}
if (file != null) {
final File folder = file.getSystemFolder();
- // System.err.println("canonicalPath=" + path + " " + folder + " " + INCLUDE_PATH);
- if (INCLUDE_PATH.contains(folder)) {
+ // System.err.println("canonicalPath=" + path + " " + folder + " " +
+ // INCLUDE_PATH);
+ if (includePath().contains(folder)) {
return true;
}
}
diff --git a/src/net/sourceforge/plantuml/svek/extremity/ExtremityExtendsLike.java b/src/net/sourceforge/plantuml/svek/extremity/ExtremityExtendsLike.java
index 0b394b1fd..d25e945bc 100644
--- a/src/net/sourceforge/plantuml/svek/extremity/ExtremityExtendsLike.java
+++ b/src/net/sourceforge/plantuml/svek/extremity/ExtremityExtendsLike.java
@@ -119,19 +119,20 @@ abstract class ExtremityExtendsLike extends Extremity {
private final UTranslate pos1, pos2;
private final UEllipse dot;
+ private static UTranslate getDotPos(double x, double y, double angle, double size, Point2D porig) {
+ Point p = new Point(x, y);
+ p.rotate(angle);
+ p.x -= size;
+ p.y -= size;
+ return p.getPos(porig);
+ }
+
public DefinedBy(Point2D porig, double angle, HColor backgroundColor) {
super(porig, angle, backgroundColor);
double w = HALF_WIDTH - DOTHSIZE;
- Point p1 = new Point(XSUFFIX, -w);
- p1.rotate(angle);
- p1.x -= DOTHSIZE;
- this.pos1 = p1.getPos(porig);
-
- Point p2 = new Point(XSUFFIX, +w);
- p2.rotate(angle);
- p2.x -= DOTHSIZE;
- this.pos2 = p2.getPos(porig);
+ this.pos1 = getDotPos(XSUFFIX, -w, angle, DOTHSIZE, porig);
+ this.pos2 = getDotPos(XSUFFIX, +w, angle, DOTHSIZE, porig);
double s = DOTHSIZE + DOTHSIZE;
this.dot = new UEllipse(s, s);
@@ -170,4 +171,4 @@ abstract class ExtremityExtendsLike extends Extremity {
ug.apply(back).draw(trig);
}
-}
+}
\ No newline at end of file
diff --git a/src/net/sourceforge/plantuml/syntax/LanguageDescriptor.java b/src/net/sourceforge/plantuml/syntax/LanguageDescriptor.java
index 108d58b21..1b973ca8e 100644
--- a/src/net/sourceforge/plantuml/syntax/LanguageDescriptor.java
+++ b/src/net/sourceforge/plantuml/syntax/LanguageDescriptor.java
@@ -161,6 +161,7 @@ public class LanguageDescriptor {
keyword.add("stereotype");
keyword.add("split");
keyword.add("style");
+ keyword.add("sprite");
preproc.add("!exit");
preproc.add("!include");
diff --git a/src/net/sourceforge/plantuml/version/License.java b/src/net/sourceforge/plantuml/version/License.java
index 975ba52f8..5484a3f56 100644
--- a/src/net/sourceforge/plantuml/version/License.java
+++ b/src/net/sourceforge/plantuml/version/License.java
@@ -305,7 +305,7 @@ public enum License {
text.add(" ");
text.add("Project Info: https://plantuml.com");
text.add(" ");
-
+
if (licenseInfo.isValid() == false) {
text.add("If you like this project or if you find it useful, you can support us at:");
text.add(" ");
@@ -313,7 +313,8 @@ public enum License {
text.add("https://plantuml.com/liberapay (only 1\u20ac per month!)");
text.add("https://plantuml.com/paypal");
if (withQrcode) {
- text.add("\t\t\t\t\t");
+ text.add(
+ "\t\t\t\t\t");
} else {
text.add("");
text.add(" ");
@@ -325,7 +326,8 @@ public enum License {
if (licenseInfo.getLicenseType() == LicenseType.NAMED) {
text.add("| ");
text.add("| LICENSED TO : " + licenseInfo.getOwner());
- text.add("| EXPIRATION DATE : " + DateFormat.getDateInstance().format(licenseInfo.getExpirationDate()));
+ text.add(
+ "| EXPIRATION DATE : " + DateFormat.getDateInstance().format(licenseInfo.getExpirationDate()));
text.add("| ");
} else if (licenseInfo.getLicenseType() == LicenseType.DISTRIBUTOR) {
text.add("| ");
@@ -338,7 +340,7 @@ public enum License {
}
}
- public List getJavaHeader() {
+ public List getJavaHeader(List contributors) {
final List h = new ArrayList();
h.add("/* ========================================================================");
h.add(" * PlantUML : a free UML diagram generator");
@@ -468,6 +470,7 @@ public enum License {
}
h.add(" *");
h.add(" * Original Author: Arnaud Roques");
+ h.addAll(contributors);
h.add(" */");
return Collections.unmodifiableList(h);
}
diff --git a/src/net/sourceforge/plantuml/version/Version.java b/src/net/sourceforge/plantuml/version/Version.java
index 9daf6eb2a..d5ff888c4 100644
--- a/src/net/sourceforge/plantuml/version/Version.java
+++ b/src/net/sourceforge/plantuml/version/Version.java
@@ -43,7 +43,7 @@ public class Version {
private static final int MAJOR_SEPARATOR = 1000000;
public static int version() {
- return 1202008;
+ return 1202009;
}
public static int versionPatched() {
@@ -79,7 +79,7 @@ public class Version {
}
public static int beta() {
- final int beta = 18;
+ final int beta = 0;
return beta;
}
@@ -92,7 +92,7 @@ public class Version {
}
public static long compileTime() {
- return 1587910102162L;
+ return 1589107866768L;
}
public static String compileTimeString() {