mken.paste.lol / biwascheme-post.js · 1 year ago·

const onError = function(e) { throw(e); } const biwa = new Interpreter(onError)

function evaluate(lisp) { return biwa.evaluate(lisp) }

assert_boolean = make_simple_assert("boolean", function(obj){ return typeof(obj) == 'boolean'; });

define_libfunc("goto-char", 1, 1, function(args) { assert_integer(args[0]); nativeGotoChar(args[0]); return nativePoint(); });

define_libfunc("point", 0, 0, function(args) { return nativePoint(); });

define_libfunc("buffer-size", 0, 0, function(args) { return nativeBufferSize(); });

define_libfunc("insert", 1, 1, function(args) { assert_string(args[0]); nativeInsert(args[0]); return args[0]; });

define_libfunc("load", 1, 1, function(args) { assert_symbol(args[0]); return nativeLoad(args[0].name); });

define_libfunc("buffer-substring", 2, 2, function(args) { assert_integer(args[0]); assert_integer(args[1]); return nativeBufferSubstring(args[0], args[1]); });

define_libfunc("alert", 2, 2, function(args) { assert_string(args[0]); assert_string(args[1]); return nativeAlert(args[0], args[1]); });

define_libfunc("sheet-present", 1, 1, function(args) { assert_list(args[0]); return nativeSheetPresent(args[0].to_array()); });

define_libfunc("date-picker-present", 2, 2, function(args) { assert_date(args[0]); assert_boolean(args[1]); return nativeDatePickerPresent(args[0], args[1]); });

define_libfunc("location-get-lat-lon-start", 0, 0, function(args) { return nativeLocationGetLatLon(); });

define_libfunc("native-current-item-set", 2, 2, function(args) { assert_string(args[0]); return nativeCurrentItemSet(args[0], args[1]); });

define_libfunc("region-beginning", 0, 0, function(args) { return nativeRegionBeginning(); });

define_libfunc("region-end", 0, 0, function(args) { return nativeRegionEnd(); });

define_libfunc("region-set", 2, 2, function(args) { assert_integer(args[0]); assert_integer(args[1]); return nativeRegionSelect(args[0], args[1]); });

define_libfunc("delete-region", 2, 2, function(args) { assert_integer(args[0]); assert_integer(args[1]); nativeDeleteRegion(args[0], args[1]); return true; });

define_libfunc("open-url", 1, 1, function(args) { assert_string(args[0]); return nativeOpenUrl(args[0]); });

define_libfunc("pasteboard", 0, 0, function(args) { return nativePasteboard(); })

define_libfunc("pasteboard-set!", 1, 1, function(args) { assert_string(args[0]); return nativePasteboardSet(args[0]); })

define_libfunc("log-contents", 0, 0, function(args) { return nativeLogContents(); })

define_libfunc("toast", 2, 2, function(args) { assert_string(args[0]); assert_string(args[1]); nativeToast(args[0], args[1]); return true; });

define_libfunc("autocorrect-set!", 1, 1, function(args) { assert_boolean(args[0]); return nativeTypingHelp(args[0]); })

define_libfunc("string-search-forward", 2, 2, function(args) { assert_string(args[0]); assert_string(args[1]); var index = args[1].indexOf(args[0]); return index == -1 ? false : index; });

define_libfunc("string-search-backward", 2, 2, function(args) { assert_string(args[0]); assert_string(args[1]); var index = args[1].lastIndexOf(args[0]); return index == -1 ? false : index; });

define_libfunc("string-contains?", 2, 2, function(args) { assert_string(args[0]); assert_string(args[1]); return args[0].includes(args[1]); });

define_libfunc("string-prefix?", 2, 2, function(args) { assert_string(args[0]); assert_string(args[1]); return args[0].startsWith(args[1]); });

define_libfunc("string-suffix?", 2, 2, function(args) { assert_string(args[0]); assert_string(args[1]); return args[0].endsWith(args[1]); });

define_libfunc("string-re-search-forward", 2, 2, function(args) { assert_string(args[0]); assert_string(args[1]); var regex = RegExp(args[0]); var result = regex.exec(args[1]); if (result == null) { return array_to_list([]); } else { var match = []; for (i = 0 ; i < result.length ; i++) { match.push(result[i]); } return array_to_list(match); } });

define_libfunc("string-concatenate", 1, 1, function(args) { assert_list(args[0]); return args[0].to_array().join(""); });

define_libfunc("log-debug", 1, 1, function(args) { assert_string(args[0]); return nativeLogDebug(args[0]); });

define_libfunc("load-themes", 1, 1, function(args) { assert_string(args[0]); return nativeLoadThemes(args[0]); });

// (date-adjust DATE AMOUNT DATE-KEY) // DATE-KEY is either 'years, 'months, 'days, 'hours, 'minutes, 'seconds define_libfunc("date-adjust", 3, 3, function(args) { assert_date(args[0]); assert_integer(args[1]); assert_symbol(args[2]); const date = dayjs(args[0]); const amount = args[1]; const dateKey = args[2].toString().substring(1); let jsdateKey; switch (dateKey) { case 'years': jsdateKey = 'year'; break; case 'months': jsdateKey = 'month'; break; case 'days': jsdateKey = 'day'; break; case 'hours': jsdateKey = 'hour'; break; case 'minutes': jsdateKey = 'minute'; break; case 'seconds': jsdateKey = 'second'; break; default: jsdateKey = null; } let result; if (jsdateKey) { result = date.add(amount, jsdateKey); } else { result = date; } return result.toDate(); });

// (date-set DATE VALUE DATE-KEY) // DATE-KEY is either 'years, 'months, 'days, 'hours, 'minutes, 'seconds define_libfunc("date-set", 3, 3, function(args) { assert_date(args[0]); assert_integer(args[1]); assert_symbol(args[2]); const date = dayjs(args[0]); const value = args[1]; const dateKey = args[2].toString().substring(1); let result; switch (dateKey) { case 'year': result = date.year(value); break; case 'month': result = date.month(value - 1); break; case 'day': result = date.date(value); break; case 'weekday': result = date.day(value); break; case 'hour': result = date.hour(value); break; case 'minute': result = date.minute(value); break; case 'second': result = date.second(value); break; default: result = date; } return result.toDate(); });