/* * 俺のための萌ディタ用少し便利な関数群 by NiG * 2007.06.19 初版 * 2007.11.22 最終更新 * */ var root = this; function help(){//この関数群の簡易ヘルプ 名前忘れたとき用 alert([ 'alert(string)', 'print(string)', 'puts(string)', 'confirm(string)', 'evalselected()', 'padding(len,char)', 'Ajax()', 'foreach,fe(function)\n\t(Format string)\n\t(RegExp)\n\t(RegExp,String|Function)', 'Format(fStr,p1,p2...)', 'info(object,flag)' ] .join('\n')); } function alert(str){ //アラート。Balloonならループの中で使っちゃっても(割と)安全 App.Balloon(''+str); } function print(str){ //地味に便利かも App.Caret.Send(''+str); } function puts(str){ //そんなに要らないかも App.Caret.Send(str+'\n'); } function confirm(str){ //confirm return App.Confirm(''+str); } function notice(str){ //下に表示 App.Notice(''+str); } function caxo(arg){ // create ActiveXObject return (new ActiveXObject(arg)); } /* バッファ全体/選択範囲の全ての行についてargの処理をする。 行が長くなるとエラーるorz * * Function : foreach( function(x,i){ return '*'+x+'*'} ) //iには行番号が渡されます * hoge → *hoge* * * String : foreach( 'hello {0}.' ) //{1}には行番号が渡されます * world → hello world. * * String+String : replace * * RegExp : foreach( /[0-9]+/ ) //match * abc123def → 123 * * RegExp+String|Function : foreach( /([0-9]+)/,'($1)' ) * abc123def → abc(123)def */ function foreach(arg,arg2){ var f,temp=[],temp_a=[],start=0,end=App.Buffer.Count-1; var caret = App.Caret; var o_row=caret.Row; var o_col=caret.Col; var wrapMode_org; if(caret.Selection.Mode!=0){ start=caret.Selection.Start.Row; end=caret.Selection.End.Row; } switch(typeof arg){ case 'string': if(arg2){ arg=new RegExp(arg.replace(/([][{}().+*|$^\\])/g,"\\$1"),"g"); f=function(x){return x.replace(arg,arg2)}; }else{ f=function(x,i){return String.Format(arg,x,i)}; } break; case 'object': if(arg instanceof RegExp) f=(arg2!==void 0?function(x,i){return x.replace(arg,arg2);}:function(x,i){return x.match(arg);}) break; default: f=arg; break; } var ltmp=[]; for(var i=start;i<=end;i++){ temp[i]=f(App.Buffer.Paragraph(i),i+1); ltmp.push((i+1)+" : "+temp[i]); } alert(ltmp.join("\n")); if(confirm('バッファに適用しますか?')){ caret.BeginOperateGroup('foreachline'); var ctx=caret.BeginUpdate(); try{ caret.Selection.Mode=0; // wrapMode_org=App.Prop(App.Buffer.ExtClass, 'wrap-mode'); //wrapModeを保存 // App.Prop(App.Buffer.ExtClass, 'wrap-mode')='fixed'; ExtClass_org = App.Buffer.ExtClass; App.Buffer.ExtClass = 'pre'; for(var i=end;i>=start;i--){ caret.MoveTo(i,0); //表示単位の移動なので問題がある。どうしようか。→ preクラスを作成し、利用することにしてみたが、やっぱだめぽ caret.Delete(caret.Paragraph.length); caret.Send(temp[i]); } App.Buffer.ExtClass = ExtClass_org; // App.Prop(App.Buffer.ExtClass, 'wrap-mode')=wrapMode_org; }finally{ caret.EndUpdate(ctx); caret.EndOperateGroup(); caret.MoveTo(o_row,o_col); } } } var fe = foreach; Function.prototype.foreach=function(){foreach(this);} // len文字になるまで文字列の先頭にcharaを詰める String.prototype.rjust = function(len,chara){ var tmp=(this.length', '}':'{' , ')':'(' , ']':'[' , '>':'<' }; var direction=1; var f=function(){ c=caret.Char; pair=pairs[c]; if( (c=="{") || (c=="(") || (c=="[") || (c=="<") ){ direction=1; }else{ direction=-1; } }; f(); if(!pair){caret.MoveLeft(1);f();} var level=0; var g=""; var clast=null; var rlast=null; while(pair){ caret.MoveRight(direction); g=caret.Char; if((caret.Col==clast) && (caret.Row==rlast))return; if(g == c)level++; if(g == pair){ if(level)level--; else break; } clast=caret.Col; rlast=caret.Row; } } // オブジェクトのprop,methodを取得 function info(target,flag){ var tmp=[]; for(var i in target){ try{ tmp.push('(' + (typeof target[i]) + ')' + i + (flag?(' = '+target[i]).replace(/(\r|\n|\t)+/g," "):'')); }catch(e){ try{ tmp.push(i); }catch(e){ } } } return (tmp.join("\n")); } // iTunes 制御関係 iTunes.start()でiTunesへ接続試行 setTimeout必須 // iTunes.App.NextTrack() // iTunes.App.PreviousTrack() // iTunes.App.Pause(); //etc var iTunes = {}; iTunes.timer = null; iTunes.update = function(){ try{ var track = iTunes.App.currentTrack; var currentTitle_str = [track.Name , track.Artist , track.Album].join("\n"); if(iTunes.currentTitle != currentTitle_str){ iTunes.showInfo(); iTunes.currentTitle = currentTitle_str; } }catch(e){ }finally{ iTunes.timer = setTimeout(arguments.callee,4000); } } iTunes.showInfo = function(){ var track=iTunes.App.currentTrack; alert( "今再生してる曲は\n{0} ({1}) {2}\nだよ".Format(track.Name , track.Artist , track.Time) ); } iTunes.start = function(quiet){ clearTimeout(this.timer); this.currentTitle = null; this.App = null; if(setTimeout.test() == false){ alert("setTimeoutが利用できません"); return false; } try{ this.App = new ActiveXObject("ITunes.Application"); if(iTunes.App){ if(!quiet)setTimeout(function(){alert("iTunesへの接続に成功しました")},100); this.timer = setTimeout(this.update,4000); } }catch(e){this.App = null; alert(e);} return ((!!this.App)) } var start = function(){ var totest = [ ["MSXMLHTTP",Ajax], ["setTimeout",setTimeout] ]; var r = []; var s = null; for(var i=0;i