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() {