mirror of
https://github.com/aNNiMON/Own-Programming-Language-Tutorial.git
synced 2024-09-20 08:44:20 +03:00
Добавлено множество восхитительных функций
This commit is contained in:
parent
95ca908243
commit
45ef0f88bb
@ -8,6 +8,8 @@ import java.util.Objects;
|
|||||||
*/
|
*/
|
||||||
public final class StringValue implements Value {
|
public final class StringValue implements Value {
|
||||||
|
|
||||||
|
public static final StringValue EMPTY = new StringValue("");
|
||||||
|
|
||||||
private final String value;
|
private final String value;
|
||||||
|
|
||||||
public StringValue(String value) {
|
public StringValue(String value) {
|
||||||
|
@ -0,0 +1,54 @@
|
|||||||
|
package com.annimon.ownlang.lib.modules.functions;
|
||||||
|
|
||||||
|
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||||
|
import com.annimon.ownlang.lib.*;
|
||||||
|
|
||||||
|
public final class robot_exec implements Function {
|
||||||
|
|
||||||
|
public static enum Mode { EXEC, EXEC_AND_WAIT };
|
||||||
|
|
||||||
|
private final Mode mode;
|
||||||
|
|
||||||
|
public robot_exec(Mode mode) {
|
||||||
|
this.mode = mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value execute(Value... args) {
|
||||||
|
if (args.length == 0) throw new ArgumentsMismatchException("At least one argument expected");
|
||||||
|
|
||||||
|
try {
|
||||||
|
final Process process;
|
||||||
|
if (args.length > 1) {
|
||||||
|
process = Runtime.getRuntime().exec(toStringArray(args));
|
||||||
|
} else switch (args[0].type()) {
|
||||||
|
case Types.ARRAY:
|
||||||
|
final ArrayValue array = (ArrayValue) args[0];
|
||||||
|
process = Runtime.getRuntime().exec(toStringArray(array.getCopyElements()));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
process = Runtime.getRuntime().exec(args[0].asString());
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (mode) {
|
||||||
|
case EXEC_AND_WAIT:
|
||||||
|
return new NumberValue(process.waitFor());
|
||||||
|
case EXEC:
|
||||||
|
default:
|
||||||
|
return NumberValue.ZERO;
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
return NumberValue.ZERO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String[] toStringArray(Value[] values) {
|
||||||
|
final String[] strings = new String[values.length];
|
||||||
|
for (int i = 0; i < values.length; i++) {
|
||||||
|
strings[i] = values[i].asString();
|
||||||
|
}
|
||||||
|
return strings;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package com.annimon.ownlang.lib.modules.functions;
|
||||||
|
|
||||||
|
import com.annimon.ownlang.lib.Function;
|
||||||
|
import com.annimon.ownlang.lib.StringValue;
|
||||||
|
import com.annimon.ownlang.lib.Value;
|
||||||
|
import java.awt.Toolkit;
|
||||||
|
import java.awt.datatransfer.DataFlavor;
|
||||||
|
|
||||||
|
public final class robot_fromclipboard implements Function {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value execute(Value... args) {
|
||||||
|
try {
|
||||||
|
Object data = Toolkit.getDefaultToolkit().getSystemClipboard()
|
||||||
|
.getData(DataFlavor.stringFlavor);
|
||||||
|
return new StringValue(data.toString());
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return StringValue.EMPTY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package com.annimon.ownlang.lib.modules.functions;
|
||||||
|
|
||||||
|
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||||
|
import com.annimon.ownlang.lib.Function;
|
||||||
|
import com.annimon.ownlang.lib.NumberValue;
|
||||||
|
import com.annimon.ownlang.lib.Value;
|
||||||
|
import java.awt.Toolkit;
|
||||||
|
import java.awt.datatransfer.StringSelection;
|
||||||
|
|
||||||
|
public final class robot_toclipboard implements Function {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value execute(Value... args) {
|
||||||
|
if (args.length != 1) throw new ArgumentsMismatchException("One argument expected");
|
||||||
|
|
||||||
|
Toolkit.getDefaultToolkit().getSystemClipboard()
|
||||||
|
.setContents(new StringSelection(args[0].asString()), null);
|
||||||
|
return NumberValue.ZERO;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package com.annimon.ownlang.lib.modules.functions;
|
||||||
|
|
||||||
|
import com.annimon.ownlang.lib.*;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
public final class std_readln implements Function {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value execute(Value... args) {
|
||||||
|
try (Scanner sc = new Scanner(System.in)) {
|
||||||
|
return new StringValue(sc.nextLine());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
13
src/com/annimon/ownlang/lib/modules/functions/std_time.java
Normal file
13
src/com/annimon/ownlang/lib/modules/functions/std_time.java
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
package com.annimon.ownlang.lib.modules.functions;
|
||||||
|
|
||||||
|
import com.annimon.ownlang.lib.Function;
|
||||||
|
import com.annimon.ownlang.lib.NumberValue;
|
||||||
|
import com.annimon.ownlang.lib.Value;
|
||||||
|
|
||||||
|
public final class std_time implements Function {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value execute(Value... args) {
|
||||||
|
return new NumberValue(System.currentTimeMillis());
|
||||||
|
}
|
||||||
|
}
|
@ -2,6 +2,9 @@ package com.annimon.ownlang.lib.modules;
|
|||||||
|
|
||||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||||
import com.annimon.ownlang.lib.*;
|
import com.annimon.ownlang.lib.*;
|
||||||
|
import com.annimon.ownlang.lib.modules.functions.robot_exec;
|
||||||
|
import com.annimon.ownlang.lib.modules.functions.robot_fromclipboard;
|
||||||
|
import com.annimon.ownlang.lib.modules.functions.robot_toclipboard;
|
||||||
import java.awt.AWTException;
|
import java.awt.AWTException;
|
||||||
import java.awt.Robot;
|
import java.awt.Robot;
|
||||||
import java.awt.event.InputEvent;
|
import java.awt.event.InputEvent;
|
||||||
@ -53,6 +56,10 @@ public final class robot implements Module {
|
|||||||
} catch (IllegalArgumentException iae) { }
|
} catch (IllegalArgumentException iae) { }
|
||||||
return NumberValue.ZERO;
|
return NumberValue.ZERO;
|
||||||
});
|
});
|
||||||
|
Functions.set("toClipboard", new robot_toclipboard());
|
||||||
|
Functions.set("fromClipboard", new robot_fromclipboard());
|
||||||
|
Functions.set("execProcess", new robot_exec(robot_exec.Mode.EXEC));
|
||||||
|
Functions.set("execProcessAndWait", new robot_exec(robot_exec.Mode.EXEC_AND_WAIT));
|
||||||
|
|
||||||
Variables.set("VK_DOWN", new NumberValue(KeyEvent.VK_DOWN));
|
Variables.set("VK_DOWN", new NumberValue(KeyEvent.VK_DOWN));
|
||||||
Variables.set("VK_LEFT", new NumberValue(KeyEvent.VK_LEFT));
|
Variables.set("VK_LEFT", new NumberValue(KeyEvent.VK_LEFT));
|
||||||
|
@ -12,10 +12,12 @@ public final class std implements Module {
|
|||||||
@Override
|
@Override
|
||||||
public void init() {
|
public void init() {
|
||||||
Functions.set("echo", new std_echo());
|
Functions.set("echo", new std_echo());
|
||||||
|
Functions.set("readln", new std_readln());
|
||||||
Functions.set("newarray", new std_newarray());
|
Functions.set("newarray", new std_newarray());
|
||||||
Functions.set("sort", new std_sort());
|
Functions.set("sort", new std_sort());
|
||||||
Functions.set("length", new std_length());
|
Functions.set("length", new std_length());
|
||||||
Functions.set("rand", new std_rand());
|
Functions.set("rand", new std_rand());
|
||||||
|
Functions.set("time", new std_time());
|
||||||
Functions.set("sleep", new std_sleep());
|
Functions.set("sleep", new std_sleep());
|
||||||
Functions.set("thread", new std_thread());
|
Functions.set("thread", new std_thread());
|
||||||
|
|
||||||
|
@ -22,7 +22,9 @@ public final class UseStatement implements Statement {
|
|||||||
final String moduleName = expression.eval().asString();
|
final String moduleName = expression.eval().asString();
|
||||||
final Module module = (Module) Class.forName(PACKAGE + moduleName).newInstance();
|
final Module module = (Module) Class.forName(PACKAGE + moduleName).newInstance();
|
||||||
module.init();
|
module.init();
|
||||||
} catch (Exception ex) { }
|
} catch (Exception ex) {
|
||||||
|
throw new RuntimeException(ex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user