From 23d8c133659ba1e75b102795ad081ea53fa88615 Mon Sep 17 00:00:00 2001 From: Ayham Al-Ali <20037329+AyhamAl-Ali@users.noreply.github.com> Date: Wed, 15 Mar 2023 13:27:06 +0300 Subject: [PATCH 1/3] Add Strutcture Support - Remove Event priority syntax from docs --- src/main/java/ch/njol/skript/Skript.java | 5 +- .../ch/njol/skript/doc/HTMLGenerator.java | 49 ++++++++++++++++++- .../skript/lang/structure/Structure.java | 1 - 3 files changed, 51 insertions(+), 4 deletions(-) diff --git a/src/main/java/ch/njol/skript/Skript.java b/src/main/java/ch/njol/skript/Skript.java index e78798f91a1..8f477208f62 100644 --- a/src/main/java/ch/njol/skript/Skript.java +++ b/src/main/java/ch/njol/skript/Skript.java @@ -1434,7 +1434,8 @@ public boolean check(final @Nullable ExpressionInfo i) { // ================ EVENTS ================ private static final List> structures = new ArrayList<>(10); - + public static final String EVENT_PRIORITY_SYNTAX = " [with priority (lowest|low|normal|high|highest|monitor)]"; + /** * Registers an event. * @@ -1465,7 +1466,7 @@ public static SkriptEventInfo registerEvent(String na String[] transformedPatterns = new String[patterns.length]; for (int i = 0; i < patterns.length; i++) - transformedPatterns[i] = "[on] " + SkriptEvent.fixPattern(patterns[i]) + " [with priority (lowest|low|normal|high|highest|monitor)]"; + transformedPatterns[i] = "[on] " + SkriptEvent.fixPattern(patterns[i]) + EVENT_PRIORITY_SYNTAX; SkriptEventInfo r = new SkriptEventInfo<>(name, transformedPatterns, c, originClassPath, events); structures.add(r); diff --git a/src/main/java/ch/njol/skript/doc/HTMLGenerator.java b/src/main/java/ch/njol/skript/doc/HTMLGenerator.java index 39ead176641..3c5e9ff71bb 100644 --- a/src/main/java/ch/njol/skript/doc/HTMLGenerator.java +++ b/src/main/java/ch/njol/skript/doc/HTMLGenerator.java @@ -36,8 +36,10 @@ import com.google.common.collect.Lists; import com.google.common.io.Files; import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.WordUtils; import org.eclipse.jdt.annotation.Nullable; +import org.skriptlang.skript.lang.entry.EntryData; +import org.skriptlang.skript.lang.entry.EntryValidator; +import org.skriptlang.skript.lang.structure.StructureInfo; import java.io.File; import java.io.IOException; @@ -50,6 +52,7 @@ import java.util.List; import java.util.Locale; import java.util.regex.Pattern; +import java.util.stream.Collectors; /** * Template engine, primarily used for generating Skript documentation @@ -274,6 +277,21 @@ else if (!filesInside.getName().matches("(?i)(.*)\\.(html?|js|css|json)")) { String genType = genParams[0]; boolean isDocsPage = genType.equals("docs"); + if (genType.equals("structures") || isDocsPage) { + + for (Iterator> it = sortedAnnotatedIterator( + (Iterator) Skript.getStructures().stream().filter(structure -> !(structure instanceof SkriptEventInfo)).iterator()); // TODO actually filter only actual StructureInfo instead of filtering out other types + it.hasNext(); ) { + + StructureInfo info = it.next(); + assert info != null; + if (info.c.getAnnotation(NoDoc.class) != null) + continue; + String desc = generateAnnotated(descTemp, info, generated.toString(), "Structure"); + generated.append(desc); + } + } + if (genType.equals("expressions") || isDocsPage) { for (Iterator> it = sortedAnnotatedIterator((Iterator) Skript.getExpressions()); it.hasNext(); ) { ExpressionInfo info = it.next(); @@ -496,6 +514,25 @@ private String generateAnnotated(String descTemp, SyntaxElementInfo info, @Nu // New Elements desc = handleIf(desc, "${if new-element}", NEW_TAG_PATTERN.matcher((since != null ? since.value() : "")).find()); + // Structure - EntryData + if (info instanceof StructureInfo) { + EntryValidator entryValidator = ((StructureInfo) info).entryValidator; + List> entryDataList = new ArrayList<>(); + if (entryValidator != null) + entryDataList.addAll(entryValidator.getEntryData()); + + // TODO add type of entrydata like boolean/string/section etc. + desc = handleIf(desc, "${if structure-optional-entrydata}", entryValidator != null); + desc = desc.replace("${element.structure-optional-entrydata}", entryValidator == null ? "" : Joiner.on(", ").join(entryDataList.stream().filter(EntryData::isOptional).map(EntryData::getKey).collect(Collectors.toList()))); + + desc = handleIf(desc, "${if structure-required-entrydata}", entryValidator != null); + desc = desc.replace("${element.structure-required-entrydata}", entryValidator == null ? "" : Joiner.on(", ").join(entryDataList.stream().filter(entryData -> !entryData.isOptional()).map(EntryData::getKey).collect(Collectors.toList()))); + } else { + desc = handleIf(desc, "${if structure-optional-entrydata}", false); + desc = handleIf(desc, "${if structure-required-entrydata}", false); + + } + // Type desc = desc.replace("${element.type}", type); @@ -604,6 +641,9 @@ private String generateEvent(String descTemp, SkriptEventInfo info, @Nullable // Return Type desc = handleIf(desc, "${if return-type}", false); + desc = handleIf(desc, "${if structure-optional-entrydata}", false); + desc = handleIf(desc, "${if structure-required-entrydata}", false); + // Generate Templates List toGen = Lists.newArrayList(); int generate = desc.indexOf("${generate"); @@ -623,6 +663,7 @@ private String generateEvent(String descTemp, SkriptEventInfo info, @Nullable for (String line : getDefaultIfNullOrEmpty(info.patterns, "Missing patterns.")) { assert line != null; line = cleanPatterns(line); + line = line.replace(Skript.EVENT_PRIORITY_SYNTAX, ""); // replace priority syntax in event syntaxes String parsed = pattern.replace("${element.pattern}", line); patterns.append(parsed); } @@ -704,6 +745,9 @@ private String generateClass(String descTemp, ClassInfo info, @Nullable Strin // Return Type desc = handleIf(desc, "${if return-type}", false); + desc = handleIf(desc, "${if structure-optional-entrydata}", false); + desc = handleIf(desc, "${if structure-required-entrydata}", false); + // Generate Templates List toGen = Lists.newArrayList(); int generate = desc.indexOf("${generate"); @@ -788,6 +832,9 @@ private String generateFunction(String descTemp, JavaFunction info) { // Type desc = desc.replace("${element.type}", "Function"); + desc = handleIf(desc, "${if structure-optional-entrydata}", false); + desc = handleIf(desc, "${if structure-required-entrydata}", false); + // Generate Templates List toGen = Lists.newArrayList(); int generate = desc.indexOf("${generate"); diff --git a/src/main/java/org/skriptlang/skript/lang/structure/Structure.java b/src/main/java/org/skriptlang/skript/lang/structure/Structure.java index 8e0a0d9cddb..1a787c366a8 100644 --- a/src/main/java/org/skriptlang/skript/lang/structure/Structure.java +++ b/src/main/java/org/skriptlang/skript/lang/structure/Structure.java @@ -51,7 +51,6 @@ * The values of these entries can be obtained by parsing the Structure's sub{@link Node}s * through registered {@link EntryData}. */ -// TODO STRUCTURE add Structures to docs public abstract class Structure implements SyntaxElement, Debuggable { /** From 0b91a73a29c7b15fe491bf6bb5b067de401c37f0 Mon Sep 17 00:00:00 2001 From: Ayham Al-Ali <20037329+AyhamAl-Ali@users.noreply.github.com> Date: Wed, 15 Mar 2023 20:50:28 +0300 Subject: [PATCH 2/3] Requested changes --- src/main/java/ch/njol/skript/Skript.java | 3 +-- src/main/java/ch/njol/skript/doc/HTMLGenerator.java | 4 ++-- src/main/java/ch/njol/skript/lang/SkriptEventInfo.java | 2 ++ 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/ch/njol/skript/Skript.java b/src/main/java/ch/njol/skript/Skript.java index 8f477208f62..7a0384b919b 100644 --- a/src/main/java/ch/njol/skript/Skript.java +++ b/src/main/java/ch/njol/skript/Skript.java @@ -1434,7 +1434,6 @@ public boolean check(final @Nullable ExpressionInfo i) { // ================ EVENTS ================ private static final List> structures = new ArrayList<>(10); - public static final String EVENT_PRIORITY_SYNTAX = " [with priority (lowest|low|normal|high|highest|monitor)]"; /** * Registers an event. @@ -1466,7 +1465,7 @@ public static SkriptEventInfo registerEvent(String na String[] transformedPatterns = new String[patterns.length]; for (int i = 0; i < patterns.length; i++) - transformedPatterns[i] = "[on] " + SkriptEvent.fixPattern(patterns[i]) + EVENT_PRIORITY_SYNTAX; + transformedPatterns[i] = "[on] " + SkriptEvent.fixPattern(patterns[i]) + SkriptEventInfo.EVENT_PRIORITY_SYNTAX; SkriptEventInfo r = new SkriptEventInfo<>(name, transformedPatterns, c, originClassPath, events); structures.add(r); diff --git a/src/main/java/ch/njol/skript/doc/HTMLGenerator.java b/src/main/java/ch/njol/skript/doc/HTMLGenerator.java index 3c5e9ff71bb..0da3679904c 100644 --- a/src/main/java/ch/njol/skript/doc/HTMLGenerator.java +++ b/src/main/java/ch/njol/skript/doc/HTMLGenerator.java @@ -280,7 +280,7 @@ else if (!filesInside.getName().matches("(?i)(.*)\\.(html?|js|css|json)")) { if (genType.equals("structures") || isDocsPage) { for (Iterator> it = sortedAnnotatedIterator( - (Iterator) Skript.getStructures().stream().filter(structure -> !(structure instanceof SkriptEventInfo)).iterator()); // TODO actually filter only actual StructureInfo instead of filtering out other types + (Iterator) Skript.getStructures().stream().filter(structure -> structure.getClass() == StructureInfo.class).iterator()); it.hasNext(); ) { StructureInfo info = it.next(); @@ -663,7 +663,7 @@ private String generateEvent(String descTemp, SkriptEventInfo info, @Nullable for (String line : getDefaultIfNullOrEmpty(info.patterns, "Missing patterns.")) { assert line != null; line = cleanPatterns(line); - line = line.replace(Skript.EVENT_PRIORITY_SYNTAX, ""); // replace priority syntax in event syntaxes + line = line.replace(SkriptEventInfo.EVENT_PRIORITY_SYNTAX, ""); // replace priority syntax in event syntaxes String parsed = pattern.replace("${element.pattern}", line); patterns.append(parsed); } diff --git a/src/main/java/ch/njol/skript/lang/SkriptEventInfo.java b/src/main/java/ch/njol/skript/lang/SkriptEventInfo.java index 1151a073378..3581e655d70 100644 --- a/src/main/java/ch/njol/skript/lang/SkriptEventInfo.java +++ b/src/main/java/ch/njol/skript/lang/SkriptEventInfo.java @@ -28,6 +28,8 @@ import ch.njol.skript.SkriptAPIException; public final class SkriptEventInfo extends StructureInfo { + + public static final String EVENT_PRIORITY_SYNTAX = " [with priority (lowest|low|normal|high|highest|monitor)]"; public Class[] events; public final String name; From a9bd5681f6acc3989369e56192cfee17d49a469e Mon Sep 17 00:00:00 2001 From: Ayham Al-Ali <20037329+AyhamAl-Ali@users.noreply.github.com> Date: Thu, 16 Mar 2023 10:59:37 +0300 Subject: [PATCH 3/3] Add spacing to Structure element examples --- src/main/java/ch/njol/skript/structures/StructFunction.java | 1 + src/main/java/ch/njol/skript/structures/StructOptions.java | 2 ++ src/main/java/ch/njol/skript/structures/StructVariables.java | 1 + 3 files changed, 4 insertions(+) diff --git a/src/main/java/ch/njol/skript/structures/StructFunction.java b/src/main/java/ch/njol/skript/structures/StructFunction.java index 608e0dcd5f3..9b52d4fd94e 100644 --- a/src/main/java/ch/njol/skript/structures/StructFunction.java +++ b/src/main/java/ch/njol/skript/structures/StructFunction.java @@ -46,6 +46,7 @@ @Examples({ "function sayMessage(message: text):", "\tbroadcast {_message} # our message argument is available in '{_message}'", + "", "local function giveApple(amount: number) :: item:", "\treturn {_amount} of apple" }) diff --git a/src/main/java/ch/njol/skript/structures/StructOptions.java b/src/main/java/ch/njol/skript/structures/StructOptions.java index 070422979ed..574592e5c96 100644 --- a/src/main/java/ch/njol/skript/structures/StructOptions.java +++ b/src/main/java/ch/njol/skript/structures/StructOptions.java @@ -49,11 +49,13 @@ @Examples({ "options:", "\tno_permission: You're missing the required permission to execute this command!", + "", "command /ping:", "\tpermission: command.ping", "\tpermission message: {@no_permission}", "\ttrigger:", "\t\tmessage \"Pong!\"", + "", "command /pong:", "\tpermission: command.pong", "\tpermission message: {@no_permission}", diff --git a/src/main/java/ch/njol/skript/structures/StructVariables.java b/src/main/java/ch/njol/skript/structures/StructVariables.java index d0d49c5a8c7..06326b2eaff 100644 --- a/src/main/java/ch/njol/skript/structures/StructVariables.java +++ b/src/main/java/ch/njol/skript/structures/StructVariables.java @@ -68,6 +68,7 @@ "variables:", "\t{joins} = 0", "\t{balance::%player%} = 0", + "", "on join:", "\tadd 1 to {joins}", "\tmessage \"Your balance is %{balance::%player%}%\"",