| spot遊び
AFDKOに含まれてるspot.exeで遊ぶとき、めっちゃ楽しいのですが、
InDesign上の適用しているフォント情報を使えないかなぁー、 って思う時ないですか? (ありますよね?w 普段ならVBで書いてしまうのですが、今回は敢えてExtendedScriptでやってみよー、ということで書いてみました。 ※VBSを絡ませてるので、winのみで動作します。 win7(x86)+InDesignCS6の環境で、試しました。 jsxファイルと同じ階層にspot.exeが必要です。 コードはspotAsobi.jsxとかで保存しちゃってください。 #target 'InDesign' // 【基本的な使い方】 // spot.exe -t hhea <FontFileFullPath> // というように、コマンドラインで入力しますが、 // -t hheaだけを指示して、InDesignの選択している文字からフォントの場所を得て、 // var result=get_spot("-t hhea", app.selection[0].appliedFont.location); // のように関数に渡すと、 // -t hhea // の結果が返ってきます。 var result=get_spot("-t hhea", app.selection[0].appliedFont.location); alert(result); // 発展させて、下記のように受け取った結果をさらに加工してアラートすることも出来ますよ~! alert(get_spot("-t hhea", app.selection[0].appliedFont.location).match(/ascender\s+=(\d+)/)[1]); function get_spot(cmd, fnt){ // spot.exeの存在確認 var scp=File($.fileName).parent; var rslt=new File(scp+'/result.txt'); // 存在しなければ作る rslt.open('w'); rslt.close(); // 開いて閉じる // .create()とか使うほうが良いのかな? var spotPath=File(scp+'/spot.exe'); if(!spotPath.exists){ // spot.exeはjsxと同じ階層に存在してないので中断する return "[ERROR]spot.exeが見つかりません"; } // fsNameを使ってc:\表記にする var toolPath=spotPath.fsName; var rsltPath=rslt.fsName; // ショートパスを得る ※本Scriptが空白を含む階層に置かれた場合を想定して vbs='app.scriptArgs.SetValue \"myTool\", CreateObject(\"Scripting.FileSystemObject\").GetFile(\"'+toolPath+'\").ShortPath'; app.doScript(vbs, ScriptLanguage.visualBasic); var toolSPath=app.scriptArgs.getValue("myTool"); // リダイレクトするファイルのショートパスを得る vbs='app.scriptArgs.SetValue \"myRSLT\", CreateObject(\"Scripting.FileSystemObject\").GetFile(\"'+rsltPath+'\").ShortPath'; app.doScript(vbs, ScriptLanguage.visualBasic); var rsltSPath=app.scriptArgs.getValue("myRSLT"); // 第2引数のフォントファイルパスをショートパスに変換 vbs='app.scriptArgs.SetValue \"myFont\", CreateObject(\"Scripting.FileSystemObject\").GetFile(\"'+fnt+'\").ShortPath'; app.doScript(vbs, ScriptLanguage.visualBasic); var fontSPath=app.scriptArgs.getValue("myFont"); // spot.exeにコマンドとフォントファイルパスを渡す vbs='Set WSHShell=CreateObject(\"WScript.Shell\"):'; vbs+='WSHShell.Run(\"cmd /c '+toolSPath+' '+cmd+' '+fontSPath+' > '; vbs+=rsltSPath+'\")'; app.doScript(vbs, ScriptLanguage.visualBasic); // リダイレクトで出力した内容を読む。 for(;;){ // 出力されるまで待つ var rslt=File(scp+'/result.txt'); if(rslt.length!=0){ break; } } rslt.encoding="CP932"; // CP932の指定をしておく(念為 var flg=rslt.open("r"); // 開く if(flg){ var txt=rslt.read(); return txt; }else{ return "[ERROR]リダイレクトしたファイルを読み込むことが出来ませんでした。"; } } 回りくどい感じがしますw。もっと良くなる気がするです(笑)
Comment
Trackback
PREV PAGE
TOP
NEXT PAGE
Copyright 2006 ©InDesignScriptForWindowsWeblog All Rights Reserved.
当ブログ内の文章・画像等の無断転載を禁じます |