Align.jsee
=区切りの文字列を整形するマクロです。元ネタはvimのAlign.vim
使い方は整形したい箇所を選択してマクロを実行すればOK
実装がややいい加減なので場合によってはうまく整形されない場合もあります。
例
body_TEXT="#000000"; body_BGCOLOR="#EFEFEF"; body_LINK="#0000FF"; body_ALINK="#FF0000"; body_VLINK="#660099"; font_COLOR="#FF0000";
を
body_TEXT ="#000000"; body_BGCOLOR="#EFEFEF"; body_LINK ="#0000FF"; body_ALINK ="#FF0000"; body_VLINK ="#660099"; font_COLOR ="#FF0000";
のように整形してくれます。
//変数初期化
var target;
var nums = new Array();
var count = new Array();
var rows = new Array();
var rows2 = new Array();
var rows3 = new Array();
var tmp;
var tmp2 = new Array();
var maxc = 0;
var a = 0;
var result = new Array();
var delimiter = "=";
//main
target = document.selection.Text;
if(target=="")
{
alert("文字列を選択してください");
Quit();
}
target = target.replace(/\t/g," ");//タブがウザイので半角スペース4つに置き換え
nums = target.split("\r\n");
for(var n in nums)
{
count[n] = nums[n].search(jregQuote(delimiter));//=がある位置をぶっこむ
tmp = nums[n].split(delimiter);
//整形するかどうかのフラグ
if(tmp.length==1)
{
fl = 1;
}else{
fl = 0;
}
tmp2[0] = tmp.shift();
tmp2[1] = tmp.join(delimiter)
//配列に該当行のデータを入れる
//rows =より前の文字列
//rows2 =より後の文字列
//rows3 整形フラグ 0=処理しない, 1=処理する
rows[n] = tmp2[0];
rows2[n] = tmp2[1];
rows3[n] = fl;
// alert(nums[0] + ":" +count[n]);
maxc = Math.max(count[n],maxc);//整形の目安となる文字数を取得
}
for(var x in rows)
{
if(rows3[x] != 1)
{
if(nums[x].search(/(if|for|while)/)!=-1)
{
//ifとかforとかwhileは整形せずに文字列を連結(結果的に該当行には何もしていない)
result[x] = rows[x] + delimiter + rows2[x];
}else{
//選択範囲ないで一番=までの文字数が多いのにあわせて文字列を連結
rows[x] = strpad(rows[x],maxc);
result[x] = rows[x] + delimiter + rows2[x];
}
}else{
//=で区切られていないやつ
result[x] = rows[x];
}
}
//整形した結果を現在の選択箇所を置き換える
document.selection.Text = result.join("\r\n");
function strpad(str,count)
{
//指定したカウントまで文字列を空白で埋める
if((a = (parseInt(count) - parseInt(str.length)))>0)
{
for(var i = 0;i<a;i++)
{
str = str + " ";
}
}
return str;
}
function jregQuote(string)
{
//正規表現をクォート
return string.replace(/(\(|\)|.|\+|\*|\\|\[|\])/,"\\$1");
}
