2021-09-24 00:36:29 -05:00
|
|
|
jdk.imports['java.io.PrintStream'].load = async () => {
|
2022-01-14 12:41:43 -05:00
|
|
|
const MessageDigest = await jdk.import('java.security.MessageDigest');
|
|
|
|
|
2021-09-23 01:41:44 -05:00
|
|
|
class PrintStream {
|
|
|
|
constructor() {
|
|
|
|
this.log = '';
|
|
|
|
this.onPrint = () => {};
|
|
|
|
}
|
|
|
|
|
|
|
|
reset() {
|
|
|
|
this.log = '';
|
|
|
|
}
|
|
|
|
|
|
|
|
_onPrint(length) {
|
|
|
|
this.onPrint(length);
|
|
|
|
}
|
|
|
|
|
2022-01-14 12:41:43 -05:00
|
|
|
_printArray(arr) {
|
|
|
|
let md = MessageDigest.getInstance();
|
|
|
|
let str = '[Ljava.lang.';
|
|
|
|
let hash = md.digest(arr.toString()).slice(0, 8);
|
|
|
|
if (arr.length == 0) {
|
|
|
|
return str + 'Array;@' + hash;
|
|
|
|
}
|
|
|
|
if (typeof arr[0] == 'string') {
|
|
|
|
return str + 'String;@' + hash;
|
|
|
|
} else {
|
|
|
|
return str + 'Number;@' + hash;
|
2021-09-23 01:41:44 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-01-14 12:41:43 -05:00
|
|
|
_print(arg, ln) {
|
|
|
|
let str;
|
|
|
|
if (Array.isArray(arg)) {
|
|
|
|
str = this._printArray(arg);
|
|
|
|
} else {
|
|
|
|
str = arg.toString();
|
|
|
|
}
|
|
|
|
if (ln) str += '\n';
|
2021-09-23 01:41:44 -05:00
|
|
|
this.log += str;
|
2021-09-23 19:56:21 -05:00
|
|
|
if (window?.ide) {
|
|
|
|
ide.log.value += str;
|
2021-09-23 01:41:44 -05:00
|
|
|
this._onPrint(str.length);
|
|
|
|
}
|
2022-01-14 12:41:43 -05:00
|
|
|
return str;
|
|
|
|
}
|
|
|
|
|
|
|
|
print(arg) {
|
|
|
|
return this._print(arg);
|
|
|
|
}
|
|
|
|
|
|
|
|
println(arg) {
|
|
|
|
return this._print(arg, true);
|
2021-09-23 01:41:44 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
printf(format, ...args) {
|
2021-11-15 20:02:30 -05:00
|
|
|
let str = String.format(format, args);
|
2022-01-14 12:41:43 -05:00
|
|
|
return this._print(str);
|
2021-09-23 01:41:44 -05:00
|
|
|
}
|
|
|
|
}
|
2021-09-23 23:26:42 -05:00
|
|
|
jdk.java.io.PrintStream = PrintStream;
|
2021-09-23 01:41:44 -05:00
|
|
|
};
|