なので、GroovyからInDesignを呼んでみます。
String[] init = ["osascript", "-e",
'''
tell application "Adobe InDesign CS3"
do script "
#targetengine \\"groovy\\"
$.evalFile(\\"~/Desktop/json2.js\\");
" language javascript
end tell
'''
]
init.execute()
String[] args = ["osascript", "-e",
'''
tell application "Adobe InDesign CS3"
do script "
#targetengine \\"groovy\\"
(function(){
var obj={};
var sels = app.activeDocument.selection;
for(var i=0;i<sels.length;i++){
if(sels[i].constructor.name === \\"TextFrame\\"){
var id = sels[i].id;
var cont = sels[i].contents;
obj[id] = cont;
alert(cont)
}
}
return JSON.stringify(obj);
})()
" language javascript
end tell
'''
]
def ary = []
def proc = args.execute().text.readLines().collect{ary.push(it)}
def cont = ary.join('')
println cont
実行結果。

返り値。

値のやりとりをどうするか考えたんですが、結局json2.jsを使う事にしました。
targetengineを指定することで、セッション間でも読み込んだライブラリを使い回すことができます。
一度Javaのコンパイラを通るので、スクリプト内のバックスラッシュは2重にしないといけません。
これでちょっとGroovyが流行るの希望。
0 件のコメント:
コメントを投稿