Skip to content

Commit f8f0437

Browse files
authored
🚀 Add Structure Support to Docs (#5523)
1 parent f858c4a commit f8f0437

File tree

7 files changed

+56
-4
lines changed

7 files changed

+56
-4
lines changed

src/main/java/ch/njol/skript/Skript.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1438,7 +1438,7 @@ public boolean check(final @Nullable ExpressionInfo<?, ?> i) {
14381438
// ================ EVENTS ================
14391439

14401440
private static final List<StructureInfo<? extends Structure>> structures = new ArrayList<>(10);
1441-
1441+
14421442
/**
14431443
* Registers an event.
14441444
*
@@ -1469,7 +1469,7 @@ public static <E extends SkriptEvent> SkriptEventInfo<E> registerEvent(String na
14691469

14701470
String[] transformedPatterns = new String[patterns.length];
14711471
for (int i = 0; i < patterns.length; i++)
1472-
transformedPatterns[i] = "[on] " + SkriptEvent.fixPattern(patterns[i]) + " [with priority (lowest|low|normal|high|highest|monitor)]";
1472+
transformedPatterns[i] = "[on] " + SkriptEvent.fixPattern(patterns[i]) + SkriptEventInfo.EVENT_PRIORITY_SYNTAX;
14731473

14741474
SkriptEventInfo<E> r = new SkriptEventInfo<>(name, transformedPatterns, c, originClassPath, events);
14751475
structures.add(r);

src/main/java/ch/njol/skript/doc/HTMLGenerator.java

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,10 @@
3636
import com.google.common.collect.Lists;
3737
import com.google.common.io.Files;
3838
import org.apache.commons.lang.StringUtils;
39-
import org.apache.commons.lang.WordUtils;
4039
import org.eclipse.jdt.annotation.Nullable;
40+
import org.skriptlang.skript.lang.entry.EntryData;
41+
import org.skriptlang.skript.lang.entry.EntryValidator;
42+
import org.skriptlang.skript.lang.structure.StructureInfo;
4143

4244
import java.io.File;
4345
import java.io.IOException;
@@ -50,6 +52,7 @@
5052
import java.util.List;
5153
import java.util.Locale;
5254
import java.util.regex.Pattern;
55+
import java.util.stream.Collectors;
5356

5457
/**
5558
* Template engine, primarily used for generating Skript documentation
@@ -274,6 +277,21 @@ else if (!filesInside.getName().matches("(?i)(.*)\\.(html?|js|css|json)")) {
274277
String genType = genParams[0];
275278
boolean isDocsPage = genType.equals("docs");
276279

280+
if (genType.equals("structures") || isDocsPage) {
281+
282+
for (Iterator<StructureInfo<?>> it = sortedAnnotatedIterator(
283+
(Iterator) Skript.getStructures().stream().filter(structure -> structure.getClass() == StructureInfo.class).iterator());
284+
it.hasNext(); ) {
285+
286+
StructureInfo<?> info = it.next();
287+
assert info != null;
288+
if (info.c.getAnnotation(NoDoc.class) != null)
289+
continue;
290+
String desc = generateAnnotated(descTemp, info, generated.toString(), "Structure");
291+
generated.append(desc);
292+
}
293+
}
294+
277295
if (genType.equals("expressions") || isDocsPage) {
278296
for (Iterator<ExpressionInfo<?,?>> it = sortedAnnotatedIterator((Iterator) Skript.getExpressions()); it.hasNext(); ) {
279297
ExpressionInfo<?,?> info = it.next();
@@ -496,6 +514,25 @@ private String generateAnnotated(String descTemp, SyntaxElementInfo<?> info, @Nu
496514
// New Elements
497515
desc = handleIf(desc, "${if new-element}", NEW_TAG_PATTERN.matcher((since != null ? since.value() : "")).find());
498516

517+
// Structure - EntryData
518+
if (info instanceof StructureInfo) {
519+
EntryValidator entryValidator = ((StructureInfo<?>) info).entryValidator;
520+
List<EntryData<?>> entryDataList = new ArrayList<>();
521+
if (entryValidator != null)
522+
entryDataList.addAll(entryValidator.getEntryData());
523+
524+
// TODO add type of entrydata like boolean/string/section etc.
525+
desc = handleIf(desc, "${if structure-optional-entrydata}", entryValidator != null);
526+
desc = desc.replace("${element.structure-optional-entrydata}", entryValidator == null ? "" : Joiner.on(", ").join(entryDataList.stream().filter(EntryData::isOptional).map(EntryData::getKey).collect(Collectors.toList())));
527+
528+
desc = handleIf(desc, "${if structure-required-entrydata}", entryValidator != null);
529+
desc = desc.replace("${element.structure-required-entrydata}", entryValidator == null ? "" : Joiner.on(", ").join(entryDataList.stream().filter(entryData -> !entryData.isOptional()).map(EntryData::getKey).collect(Collectors.toList())));
530+
} else {
531+
desc = handleIf(desc, "${if structure-optional-entrydata}", false);
532+
desc = handleIf(desc, "${if structure-required-entrydata}", false);
533+
534+
}
535+
499536
// Type
500537
desc = desc.replace("${element.type}", type);
501538

@@ -604,6 +641,9 @@ private String generateEvent(String descTemp, SkriptEventInfo<?> info, @Nullable
604641
// Return Type
605642
desc = handleIf(desc, "${if return-type}", false);
606643

644+
desc = handleIf(desc, "${if structure-optional-entrydata}", false);
645+
desc = handleIf(desc, "${if structure-required-entrydata}", false);
646+
607647
// Generate Templates
608648
List<String> toGen = Lists.newArrayList();
609649
int generate = desc.indexOf("${generate");
@@ -623,6 +663,7 @@ private String generateEvent(String descTemp, SkriptEventInfo<?> info, @Nullable
623663
for (String line : getDefaultIfNullOrEmpty(info.patterns, "Missing patterns.")) {
624664
assert line != null;
625665
line = cleanPatterns(line);
666+
line = line.replace(SkriptEventInfo.EVENT_PRIORITY_SYNTAX, ""); // replace priority syntax in event syntaxes
626667
String parsed = pattern.replace("${element.pattern}", line);
627668
patterns.append(parsed);
628669
}
@@ -704,6 +745,9 @@ private String generateClass(String descTemp, ClassInfo<?> info, @Nullable Strin
704745
// Return Type
705746
desc = handleIf(desc, "${if return-type}", false);
706747

748+
desc = handleIf(desc, "${if structure-optional-entrydata}", false);
749+
desc = handleIf(desc, "${if structure-required-entrydata}", false);
750+
707751
// Generate Templates
708752
List<String> toGen = Lists.newArrayList();
709753
int generate = desc.indexOf("${generate");
@@ -788,6 +832,9 @@ private String generateFunction(String descTemp, JavaFunction<?> info) {
788832
// Type
789833
desc = desc.replace("${element.type}", "Function");
790834

835+
desc = handleIf(desc, "${if structure-optional-entrydata}", false);
836+
desc = handleIf(desc, "${if structure-required-entrydata}", false);
837+
791838
// Generate Templates
792839
List<String> toGen = Lists.newArrayList();
793840
int generate = desc.indexOf("${generate");

src/main/java/ch/njol/skript/lang/SkriptEventInfo.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
import ch.njol.skript.SkriptAPIException;
2929

3030
public final class SkriptEventInfo<E extends SkriptEvent> extends StructureInfo<E> {
31+
32+
public static final String EVENT_PRIORITY_SYNTAX = " [with priority (lowest|low|normal|high|highest|monitor)]";
3133

3234
public Class<? extends Event>[] events;
3335
public final String name;

src/main/java/ch/njol/skript/structures/StructFunction.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
@Examples({
4747
"function sayMessage(message: text):",
4848
"\tbroadcast {_message} # our message argument is available in '{_message}'",
49+
"",
4950
"local function giveApple(amount: number) :: item:",
5051
"\treturn {_amount} of apple"
5152
})

src/main/java/ch/njol/skript/structures/StructOptions.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,13 @@
4949
@Examples({
5050
"options:",
5151
"\tno_permission: You're missing the required permission to execute this command!",
52+
"",
5253
"command /ping:",
5354
"\tpermission: command.ping",
5455
"\tpermission message: {@no_permission}",
5556
"\ttrigger:",
5657
"\t\tmessage \"Pong!\"",
58+
"",
5759
"command /pong:",
5860
"\tpermission: command.pong",
5961
"\tpermission message: {@no_permission}",

src/main/java/ch/njol/skript/structures/StructVariables.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
"variables:",
6969
"\t{joins} = 0",
7070
"\t{balance::%player%} = 0",
71+
"",
7172
"on join:",
7273
"\tadd 1 to {joins}",
7374
"\tmessage \"Your balance is %{balance::%player%}%\"",

src/main/java/org/skriptlang/skript/lang/structure/Structure.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
* The values of these entries can be obtained by parsing the Structure's sub{@link Node}s
5252
* through registered {@link EntryData}.
5353
*/
54-
// TODO STRUCTURE add Structures to docs
5554
public abstract class Structure implements SyntaxElement, Debuggable {
5655

5756
/**

0 commit comments

Comments
 (0)