From 0ea39acdee1d23eebf73ceff40c1fd9951086c3d Mon Sep 17 00:00:00 2001 From: Shane Bee Date: Sat, 4 Jan 2025 09:48:39 -0800 Subject: [PATCH] Since (annotation) - support multiple lines (#7381) * Since - support multiple lines * HTMLGenerator - add back empty since thingy * HTMLGenerator - remove some extra lines * HTMLGenerator - add "pre" to pattern * HTMLGenerator - jk jk * HTMLGenerator - fix "new" thingy in docs * HTMLGenerator - change useless matcher to false * Update src/main/java/ch/njol/skript/doc/HTMLGenerator.java Co-authored-by: Patrick Miller * HTMLGenerator - only check the last value of a "since" --------- Co-authored-by: Patrick Miller --- .../java/ch/njol/skript/doc/Documentation.java | 2 +- .../java/ch/njol/skript/doc/HTMLGenerator.java | 14 ++++++++++---- .../java/ch/njol/skript/doc/JSONGenerator.java | 2 +- src/main/java/ch/njol/skript/doc/Since.java | 2 +- .../java/ch/njol/skript/expressions/ExprName.java | 7 ++++++- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/main/java/ch/njol/skript/doc/Documentation.java b/src/main/java/ch/njol/skript/doc/Documentation.java index 3f444971b4d..d1509f84a42 100644 --- a/src/main/java/ch/njol/skript/doc/Documentation.java +++ b/src/main/java/ch/njol/skript/doc/Documentation.java @@ -291,7 +291,7 @@ private static void insertSyntaxElement(final PrintWriter pw, final SyntaxElemen return; } final String desc = validateHTML(StringUtils.join(elementClass.getAnnotation(Description.class).value(), "
"), type + "s"); - final String since = validateHTML(elementClass.getAnnotation(Since.class).value(), type + "s"); + final String since = validateHTML(StringUtils.join(elementClass.getAnnotation(Since.class).value(), "
"), type + "s"); if (desc == null || since == null) { Skript.warning("" + elementClass.getSimpleName() + "'s description or 'since' is invalid"); return; diff --git a/src/main/java/ch/njol/skript/doc/HTMLGenerator.java b/src/main/java/ch/njol/skript/doc/HTMLGenerator.java index 26473f314fd..6c23102ed32 100644 --- a/src/main/java/ch/njol/skript/doc/HTMLGenerator.java +++ b/src/main/java/ch/njol/skript/doc/HTMLGenerator.java @@ -45,8 +45,8 @@ */ public class HTMLGenerator extends DocumentationGenerator { - private static final String SKRIPT_VERSION = Skript.getVersion().toString().replaceAll("-(dev|alpha|beta)\\d*", ""); // Filter branches - private static final Pattern NEW_TAG_PATTERN = Pattern.compile(SKRIPT_VERSION + "(?!\\.)"); // (?!\\.) to avoid matching 2.6 in 2.6.1 etc. + private static final String SKRIPT_VERSION = Skript.getVersion().toString().replaceAll("-(dev|alpha|beta|pre)\\d*", "").replace(".0", ""); // Filter branches + private static final Pattern NEW_TAG_PATTERN = Pattern.compile(SKRIPT_VERSION + "(?!\\.[1-9])"); // (?!\\.) to avoid matching 2.6 in 2.6.1 etc. private static final Pattern RETURN_TYPE_LINK_PATTERN = Pattern.compile("( ?href=\"(classes\\.html|)#|)\\$\\{element\\.return-type-linkcheck}"); private final String skeleton; @@ -434,7 +434,7 @@ private String generateAnnotated(String descTemp, SyntaxElementInfo info, @Nu // Since Since since = c.getAnnotation(Since.class); - desc = desc.replace("${element.since}", getDefaultIfNullOrEmpty((since != null ? since.value() : null), "Unknown")); + desc = desc.replace("${element.since}", Joiner.on("
").join(getDefaultIfNullOrEmpty((since != null ? since.value() : null), "Unknown"))); Keywords keywords = c.getAnnotation(Keywords.class); desc = desc.replace("${element.keywords}", keywords == null ? "" : Joiner.on(", ").join(keywords.value())); @@ -488,7 +488,13 @@ private String generateAnnotated(String descTemp, SyntaxElementInfo info, @Nu desc = handleIf(desc, "${if by-addon}", false); // New Elements - desc = handleIf(desc, "${if new-element}", NEW_TAG_PATTERN.matcher((since != null ? since.value() : "")).find()); + if (since != null) { + String[] value = since.value(); + String s = value[value.length - 1]; + desc = handleIf(desc, "${if new-element}", NEW_TAG_PATTERN.matcher(s).find()); + } else { + desc = handleIf(desc, "${if new-element}", false); + } // Structure - EntryData if (info instanceof StructureInfo) { diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java index 9e33a90f66c..f8c9827474e 100644 --- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java +++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java @@ -64,7 +64,7 @@ public JSONGenerator(File templateDir, File outputDir) { syntaxJsonObject.addProperty("name", nameAnnotation.value()); Since sinceAnnotation = syntaxClass.getAnnotation(Since.class); - syntaxJsonObject.addProperty("since", sinceAnnotation == null ? null : sinceAnnotation.value()); + syntaxJsonObject.add("since", sinceAnnotation == null ? null : convertToJsonArray(sinceAnnotation.value())); Description descriptionAnnotation = syntaxClass.getAnnotation(Description.class); if (descriptionAnnotation != null) { diff --git a/src/main/java/ch/njol/skript/doc/Since.java b/src/main/java/ch/njol/skript/doc/Since.java index b88e2f965b3..d39ddab5b7b 100644 --- a/src/main/java/ch/njol/skript/doc/Since.java +++ b/src/main/java/ch/njol/skript/doc/Since.java @@ -15,5 +15,5 @@ @Documented public @interface Since { - public String value(); + public String[] value(); } diff --git a/src/main/java/ch/njol/skript/expressions/ExprName.java b/src/main/java/ch/njol/skript/expressions/ExprName.java index fcf86089a76..4501d11ac11 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprName.java +++ b/src/main/java/ch/njol/skript/expressions/ExprName.java @@ -81,7 +81,12 @@ "\tset the player's tab list name to \"<green>%player's name%\"", "set the name of the player's tool to \"Legendary Sword of Awesomeness\"" }) -@Since("before 2.1, 2.2-dev20 (inventory name), 2.4 (non-living entity support, changeable inventory name), 2.7 (worlds)") +@Since({ + "before 2.1", + "2.2-dev20 (inventory name)", + "2.4 (non-living entity support, changeable inventory name)", + "2.7 (worlds)" +}) public class ExprName extends SimplePropertyExpression { @Nullable