説明
- 選択範囲内の各行に対し、[001-010]のように書かれた部分を連番に展開し、リストを挿入する。
- [###-###]でかかれた最初の方の数字の桁数に併せて、連番を0埋めする
- 選択範囲がなければカーソルのある行に対して処理を行う
例
実行前の選択範囲
[000-003].jpg http://host.com/[0-2]/[0-10].jpg
実行後
000.jpg 001.jpg 002.jpg 003.jpg http://host.com/0/0.jpg http://host.com/0/1.jpg ...(中略) http://host.com/2/9.jpg http://host.com/2/10.jpg
ソース(.jsee)
// strを各行ごとの終端に改行コードを残して配列にする。
function split_line(str) {
var rest = str;
var result = new Array();
while (true) {
if (/(\r\n|\r|\n)/.test(rest)) {
result.push(RegExp.leftContext + RegExp.$1);
rest = RegExp.rightContext;
} else {
if (rest.length > 0)
result.push(rest + "\r\n");
break;
}
}
return result;
}
// digit桁に0-paddingした、nの10進数表現
function to_s(n, digit) {
var result = n.toString();
while (result.length < digit)
result = "0" + result;
return result;
}
// [###-###] を範囲内の数字に置き換えた文字列のリストを取得し、resultの末尾に追加
function expand(str, result) {
if (/\[(\d+)\-(\d+)\]/.test(str)) {
var digit = RegExp.$1.length;
var i = parseInt(RegExp.$1);
var j = parseInt(RegExp.$2);
var lstr = RegExp.leftContext;
var rstr = RegExp.rightContext;
for (var k = i; k <= j; k++)
expand(lstr + to_s(k, digit) + rstr, result);
} else {
result.push(str);
}
}
if (Document.selection.IsEmpty)
Document.selection.SelectLine();
var str = Document.selection.Text;
var lines = split_line(str)
var result = new Array();
for (var i in lines)
expand(lines[i], result);
Document.selection.Text = result.join("");
