Skip to content

Commit ba56ea6

Browse files
committed
Added "clr -help <default native function>"
1 parent 9e11832 commit ba56ea6

13 files changed

+215
-2
lines changed

src/main/java/me/kuwg/clarity/Clarity.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import me.kuwg.clarity.installer.sys.ClarityInstaller;
1010
import me.kuwg.clarity.installer.sys.OS;
1111
import me.kuwg.clarity.interpreter.Interpreter;
12+
import me.kuwg.clarity.nmh.NativeMethodHandler;
1213
import me.kuwg.clarity.parser.ASTParser;
1314
import me.kuwg.clarity.parser.Keyword;
1415
import me.kuwg.clarity.token.Token;
@@ -84,7 +85,12 @@ void exec() throws IOException {
8485
final Keyword kw = Keyword.keyword(arg2);
8586

8687
if (kw == null) {
87-
System.err.println("Keyword not found: " + arg2);
88+
89+
final NativeMethodHandler nmh = new NativeMethodHandler();
90+
91+
if (nmh.help(arg2)) return;
92+
93+
System.err.println("Keyword or native function not found: " + arg2);
8894
System.err.println("Use \"help keywords\" to list all keywords.");
8995
return;
9096
}

src/main/java/me/kuwg/clarity/nmh/LocalClarityNativeLibrary.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import me.kuwg.clarity.library.ClarityNativeLibrary;
44
import me.kuwg.clarity.library.natives.ClarityNativeClass;
55
import me.kuwg.clarity.library.natives.ClarityNativeFunction;
6+
import me.kuwg.clarity.nmh.natives.abstracts.DefaultNativeFunction;
67
import me.kuwg.clarity.nmh.natives.impl.clazz.FileNativeClass;
78
import me.kuwg.clarity.nmh.natives.impl.clazz.MathNativeClass;
89
import me.kuwg.clarity.nmh.natives.impl.clazz.ReflectionsNativeClass;
@@ -31,7 +32,7 @@ public final class LocalClarityNativeLibrary implements ClarityNativeLibrary {
3132
*/
3233
@Override
3334
public ClarityNativeFunction<?>[] getLibraryNativeFunctions() {
34-
return new ClarityNativeFunction[] {
35+
return new DefaultNativeFunction[] {
3536
new PrintlnNative(),
3637
new InputNative(),
3738
new PrintNative(),

src/main/java/me/kuwg/clarity/nmh/NativeMethodHandler.java

+13
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import me.kuwg.clarity.library.natives.ClarityNativeFunction;
77
import me.kuwg.clarity.library.natives.ClarityPackagedNativeFunction;
88
import me.kuwg.clarity.library.objects.VoidObject;
9+
import me.kuwg.clarity.nmh.natives.abstracts.DefaultNativeFunction;
910
import me.kuwg.clarity.nmh.natives.abstracts.PackagedNativeFunction;
1011
import me.kuwg.clarity.nmh.natives.impl.pkg.date.NowDateNative;
1112
import me.kuwg.clarity.nmh.natives.impl.pkg.error.ThrowNative;
@@ -162,6 +163,18 @@ public Object callClassNative(final String name, final String method, final List
162163
return VoidObject.VOID_OBJECT;
163164
}
164165

166+
public boolean help(final String name) {
167+
final ClarityNativeFunction<?> cnf = defaultFunctions.get(name);
168+
169+
if (!(cnf instanceof DefaultNativeFunction<?>)) return false;
170+
171+
System.out.println("Printing help for default native function " + name);
172+
173+
((DefaultNativeFunction<?>) cnf).help();
174+
175+
return true;
176+
}
177+
165178
/**
166179
* Converts a list of objects into a comma-separated string of their respective class names.
167180
*
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,36 @@
11
package me.kuwg.clarity.nmh.natives.abstracts;
22

3+
import java.util.Map;
4+
5+
import static me.kuwg.clarity.util.ConsoleColors.*;
6+
37
public abstract class DefaultNativeFunction<R> extends NativeFunction<R> {
48
protected DefaultNativeFunction(final String name) {
59
super(name);
610
}
11+
12+
// Prints help to console
13+
public abstract void help();
14+
15+
protected String formatHelp(final Map<String, String> params) {
16+
final StringBuilder help = new StringBuilder(WHITE + super.getName() + YELLOW + "(");
17+
18+
int count = 0;
19+
final int size = params.size();
20+
21+
for (final Map.Entry<String, String> entry : params.entrySet()) {
22+
final String param = entry.getKey();
23+
final String type = entry.getValue();
24+
help.append(GREEN).append(param).append(RED).append(":").append(CYAN).append(type);
25+
26+
count++;
27+
if (count < size) {
28+
help.append(", ");
29+
}
30+
}
31+
32+
help.append(YELLOW + ")" + RESET);
33+
34+
return help.toString();
35+
}
736
}

src/main/java/me/kuwg/clarity/nmh/natives/impl/def/ArrayNative.java

+11
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import me.kuwg.clarity.nmh.natives.abstracts.DefaultNativeFunction;
44
import me.kuwg.clarity.register.Register;
55

6+
import java.util.HashMap;
67
import java.util.List;
8+
import java.util.Map;
79

810
public class ArrayNative extends DefaultNativeFunction<Object[]> {
911
public ArrayNative() {
@@ -24,4 +26,13 @@ public Object[] call(final List<Object> params) {
2426
protected boolean applies0(final List<Object> params) {
2527
return params.size() == 1 && params.get(0) instanceof Long;
2628
}
29+
30+
@Override
31+
public void help() {
32+
final Map<String, String> map = new HashMap<>();
33+
34+
map.put("size", "int");
35+
36+
System.out.println(formatHelp(map));
37+
}
2738
}

src/main/java/me/kuwg/clarity/nmh/natives/impl/def/ErrNative.java

+12
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
import me.kuwg.clarity.nmh.natives.abstracts.DefaultNativeFunction;
55

66
import java.util.Arrays;
7+
import java.util.HashMap;
78
import java.util.List;
9+
import java.util.Map;
810

911
public class ErrNative extends DefaultNativeFunction<VoidObject> {
1012

@@ -27,4 +29,14 @@ private String paramsToString(final List<Object> params) {
2729
final String line = params.get(0) instanceof Object[] ? Arrays.toString((Object[]) params.get(0)) : params.get(0).toString();
2830
return params.size() == 1 ? line : (boolean) params.get(1) ? line + "\n" : line;
2931
}
32+
33+
@Override
34+
public void help() {
35+
final Map<String, String> map = new HashMap<>();
36+
37+
map.put("value", "var");
38+
map.put("[newLine]", "bool");
39+
40+
System.out.println(formatHelp(map));
41+
}
3042
}

src/main/java/me/kuwg/clarity/nmh/natives/impl/def/InputNative.java

+11
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import me.kuwg.clarity.nmh.natives.abstracts.DefaultNativeFunction;
44

5+
import java.util.HashMap;
56
import java.util.List;
7+
import java.util.Map;
68
import java.util.Scanner;
79

810
public class InputNative extends DefaultNativeFunction<String> {
@@ -31,4 +33,13 @@ protected boolean applies0(List<Object> params) {
3133
protected void finalize() {
3234
scanner.close();
3335
}
36+
37+
@Override
38+
public void help() {
39+
final Map<String, String> map = new HashMap<>();
40+
41+
map.put("[print]", "var");
42+
43+
System.out.println(formatHelp(map));
44+
}
3445
}

src/main/java/me/kuwg/clarity/nmh/natives/impl/def/NanoNative.java

+9
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import me.kuwg.clarity.nmh.natives.abstracts.DefaultNativeFunction;
44

5+
import java.util.HashMap;
56
import java.util.List;
7+
import java.util.Map;
68

79
public class NanoNative extends DefaultNativeFunction<Long> {
810
private static final long START = System.nanoTime();
@@ -19,4 +21,11 @@ public Long call(final List<Object> params) {
1921
protected boolean applies0(final List<Object> params) {
2022
return params.isEmpty();
2123
}
24+
25+
@Override
26+
public void help() {
27+
final Map<String, String> map = new HashMap<>();
28+
29+
System.out.println(formatHelp(map));
30+
}
2231
}

src/main/java/me/kuwg/clarity/nmh/natives/impl/def/NowNative.java

+8
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import me.kuwg.clarity.nmh.natives.abstracts.DefaultNativeFunction;
44

5+
import java.util.HashMap;
56
import java.util.List;
7+
import java.util.Map;
68

79
public class NowNative extends DefaultNativeFunction<Long> {
810
private static final long START = System.currentTimeMillis();
@@ -19,4 +21,10 @@ public Long call(final List<Object> params) {
1921
protected boolean applies0(final List<Object> params) {
2022
return params.isEmpty();
2123
}
24+
@Override
25+
public void help() {
26+
final Map<String, String> map = new HashMap<>();
27+
28+
System.out.println(formatHelp(map));
29+
}
2230
}

src/main/java/me/kuwg/clarity/nmh/natives/impl/def/PrintlnNative.java

+11
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import me.kuwg.clarity.library.objects.VoidObject;
44
import me.kuwg.clarity.nmh.natives.abstracts.DefaultNativeFunction;
55

6+
import java.util.HashMap;
67
import java.util.List;
8+
import java.util.Map;
79

810
public class PrintlnNative extends DefaultNativeFunction<VoidObject> {
911

@@ -50,4 +52,13 @@ private String arrayToString(final Object[] array) {
5052
s.append("]");
5153
return s.toString();
5254
}
55+
56+
@Override
57+
public void help() {
58+
final Map<String, String> map = new HashMap<>();
59+
60+
map.put("obj...", "var");
61+
62+
System.out.println(formatHelp(map));
63+
}
5364
}

src/main/java/me/kuwg/clarity/nmh/natives/impl/def/SortNative.java

+11
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
import me.kuwg.clarity.nmh.natives.abstracts.DefaultNativeFunction;
55
import me.kuwg.clarity.register.Register;
66

7+
import java.util.HashMap;
78
import java.util.List;
9+
import java.util.Map;
810

911
public class SortNative extends DefaultNativeFunction<VoidObject> {
1012

@@ -63,4 +65,13 @@ private static void swap(final Object[] arr, final int i, final int j) {
6365
arr[j] = temp;
6466
}
6567
}
68+
69+
@Override
70+
public void help() {
71+
final Map<String, String> map = new HashMap<>();
72+
73+
map.put("array", "arr");
74+
75+
System.out.println(formatHelp(map));
76+
}
6677
}

src/main/java/me/kuwg/clarity/nmh/natives/impl/def/TypeOfNative.java

+11
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import me.kuwg.clarity.nmh.natives.abstracts.DefaultNativeFunction;
77
import me.kuwg.clarity.register.Register;
88

9+
import java.util.HashMap;
910
import java.util.List;
11+
import java.util.Map;
1012

1113
public class TypeOfNative extends DefaultNativeFunction<String> {
1214
public TypeOfNative() {
@@ -43,4 +45,13 @@ public String call(final List<Object> list) {
4345
protected boolean applies0(final List<Object> list) {
4446
return list.size() == 1;
4547
}
48+
49+
@Override
50+
public void help() {
51+
final Map<String, String> map = new HashMap<>();
52+
53+
map.put("obj", "var");
54+
55+
System.out.println(formatHelp(map));
56+
}
4657
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package me.kuwg.clarity.util;
2+
3+
/**
4+
* see <a href="https://stackoverflow.com/questions/5762491/how-to-print-color-in-console-using-system-out-println">Stack Overflow</a>
5+
* @author shakram02
6+
*/
7+
public class ConsoleColors {
8+
// Reset
9+
public static final String RESET = "\033[0m"; // Text Reset
10+
11+
// Regular Colors
12+
public static final String BLACK = "\033[0;30m"; // BLACK
13+
public static final String RED = "\033[0;31m"; // RED
14+
public static final String GREEN = "\033[0;32m"; // GREEN
15+
public static final String YELLOW = "\033[0;33m"; // YELLOW
16+
public static final String BLUE = "\033[0;34m"; // BLUE
17+
public static final String PURPLE = "\033[0;35m"; // PURPLE
18+
public static final String CYAN = "\033[0;36m"; // CYAN
19+
public static final String WHITE = "\033[0;37m"; // WHITE
20+
21+
// Bold
22+
public static final String BLACK_BOLD = "\033[1;30m"; // BLACK
23+
public static final String RED_BOLD = "\033[1;31m"; // RED
24+
public static final String GREEN_BOLD = "\033[1;32m"; // GREEN
25+
public static final String YELLOW_BOLD = "\033[1;33m"; // YELLOW
26+
public static final String BLUE_BOLD = "\033[1;34m"; // BLUE
27+
public static final String PURPLE_BOLD = "\033[1;35m"; // PURPLE
28+
public static final String CYAN_BOLD = "\033[1;36m"; // CYAN
29+
public static final String WHITE_BOLD = "\033[1;37m"; // WHITE
30+
31+
// Underline
32+
public static final String BLACK_UNDERLINED = "\033[4;30m"; // BLACK
33+
public static final String RED_UNDERLINED = "\033[4;31m"; // RED
34+
public static final String GREEN_UNDERLINED = "\033[4;32m"; // GREEN
35+
public static final String YELLOW_UNDERLINED = "\033[4;33m"; // YELLOW
36+
public static final String BLUE_UNDERLINED = "\033[4;34m"; // BLUE
37+
public static final String PURPLE_UNDERLINED = "\033[4;35m"; // PURPLE
38+
public static final String CYAN_UNDERLINED = "\033[4;36m"; // CYAN
39+
public static final String WHITE_UNDERLINED = "\033[4;37m"; // WHITE
40+
41+
// Background
42+
public static final String BLACK_BACKGROUND = "\033[40m"; // BLACK
43+
public static final String RED_BACKGROUND = "\033[41m"; // RED
44+
public static final String GREEN_BACKGROUND = "\033[42m"; // GREEN
45+
public static final String YELLOW_BACKGROUND = "\033[43m"; // YELLOW
46+
public static final String BLUE_BACKGROUND = "\033[44m"; // BLUE
47+
public static final String PURPLE_BACKGROUND = "\033[45m"; // PURPLE
48+
public static final String CYAN_BACKGROUND = "\033[46m"; // CYAN
49+
public static final String WHITE_BACKGROUND = "\033[47m"; // WHITE
50+
51+
// High Intensity
52+
public static final String BLACK_BRIGHT = "\033[0;90m"; // BLACK
53+
public static final String RED_BRIGHT = "\033[0;91m"; // RED
54+
public static final String GREEN_BRIGHT = "\033[0;92m"; // GREEN
55+
public static final String YELLOW_BRIGHT = "\033[0;93m"; // YELLOW
56+
public static final String BLUE_BRIGHT = "\033[0;94m"; // BLUE
57+
public static final String PURPLE_BRIGHT = "\033[0;95m"; // PURPLE
58+
public static final String CYAN_BRIGHT = "\033[0;96m"; // CYAN
59+
public static final String WHITE_BRIGHT = "\033[0;97m"; // WHITE
60+
61+
// Bold High Intensity
62+
public static final String BLACK_BOLD_BRIGHT = "\033[1;90m"; // BLACK
63+
public static final String RED_BOLD_BRIGHT = "\033[1;91m"; // RED
64+
public static final String GREEN_BOLD_BRIGHT = "\033[1;92m"; // GREEN
65+
public static final String YELLOW_BOLD_BRIGHT = "\033[1;93m";// YELLOW
66+
public static final String BLUE_BOLD_BRIGHT = "\033[1;94m"; // BLUE
67+
public static final String PURPLE_BOLD_BRIGHT = "\033[1;95m";// PURPLE
68+
public static final String CYAN_BOLD_BRIGHT = "\033[1;96m"; // CYAN
69+
public static final String WHITE_BOLD_BRIGHT = "\033[1;97m"; // WHITE
70+
71+
// High Intensity backgrounds
72+
public static final String BLACK_BACKGROUND_BRIGHT = "\033[0;100m";// BLACK
73+
public static final String RED_BACKGROUND_BRIGHT = "\033[0;101m";// RED
74+
public static final String GREEN_BACKGROUND_BRIGHT = "\033[0;102m";// GREEN
75+
public static final String YELLOW_BACKGROUND_BRIGHT = "\033[0;103m";// YELLOW
76+
public static final String BLUE_BACKGROUND_BRIGHT = "\033[0;104m";// BLUE
77+
public static final String PURPLE_BACKGROUND_BRIGHT = "\033[0;105m"; // PURPLE
78+
public static final String CYAN_BACKGROUND_BRIGHT = "\033[0;106m"; // CYAN
79+
public static final String WHITE_BACKGROUND_BRIGHT = "\033[0;107m"; // WHITE
80+
}

0 commit comments

Comments
 (0)