以下の内容はhttps://m-hiyama.hatenablog.com/entry/20090128/1233124588より取得しました。


RhinoのreadFileとload、カレントディレクトリ対応

「Rhinoに基本ディレクトリコマンドを実装する」

pwdやcdを作っても、もともとの目的は達成されませんでした。その目的とは、loadやreadFileのデフォルトディレクトリを変えることです。Javaのレベルでuser.dirを変更しても、Rhinoが保持している(と思われる)デフォルトディレクトリに影響はないようです。残念。

readFile, loadを上書きしてしまえばいいようです。例外が起きたときのエラーメッセージとかが不格好なんですが、とりあえず動作します。


/* load.js */

// このファイルが2度以上読まれたときへの対処
if (!("orig_load" in this)) {
this.orig_load = load;
}
if (!("orig_readFile" in this)) {
this.orig_readFile = readFile;
}

// 相対パス絶対パスに直す、絶対パスならそのまま
function completePath(file) {
var path;
if (file.match(/^[\\\/]/) || file.match(/^[A-Z]:[\\\/]/i)) {
// absolute path
path = file;
} else {
var sep = environment["file.separator"];
path = environment["user.dir"] + sep + file;
}
return path;
}

// カレントディレクトリを考慮するreadFile
function my_readFile(file) {
var path = completePath(file);
return orig_readFile(path);
}

// カレントディレクトリを考慮するload
function my_load(file) {
var path = completePath(file);
return orig_load(path);
}

// load, readFileを、自前関数で上書きする
this.load = my_load;
this.readFile = my_readFile;

loadは、eval(my_readFile(file)) でいいかと思いましたが、オリジナルのloadとは挙動が変わってしまいますね。




以上の内容はhttps://m-hiyama.hatenablog.com/entry/20090128/1233124588より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14