説明
- 選択範囲内の各行に対し、[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("");