「拡張子の違うファイルを開く」の版間の差分
→変更履歴: 箇条書きの修正 |
SyntaxHighlightにcopyの追加 |
||
| (同じ利用者による、間の3版が非表示) | |||
| 4行目: | 4行目: | ||
* r2 (2014-08-07) | * r2 (2014-08-07) | ||
** 拡張子を限定せず何でも開くように | ** 拡張子を限定せず何でも開くように | ||
* r1 | * r1 (2012-06-22) | ||
** 失念 | ** 失念 | ||
== ソースコード == | == ソースコード == | ||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript" copy> | ||
// 拡張子の違うファイルを開く.js r2 (2014-08-07) | // 拡張子の違うファイルを開く.js r2 (2014-08-07) | ||
// 同じフォルダにある拡張子以前が共通のファイルを順に開きます | // 同じフォルダにある拡張子以前が共通のファイルを順に開きます | ||
var FS = new ActiveXObject("Scripting.FileSystemObject") | var FS = new ActiveXObject("Scripting.FileSystemObject"); | ||
function main() { | |||
var path = document.Path; | |||
var name = document.Name; | |||
var next = calc_next_file(path, name); | |||
if (next) { | |||
editor.OpenFile(next, 0, meOpenAllowNewWindow); | |||
} | |||
} | } | ||
function calc_next_file(path, name) | function calc_next_file(path, name) { | ||
{ | name = name.toLocaleLowerCase(); | ||
var name_dot_ext = split_at_dot(name); | |||
if (!name_dot_ext) { | |||
return; | |||
} | |||
var name_dot = name_dot_ext[0]; | |||
var ext = name_dot_ext[1]; | |||
var files = []; | |||
each_file(path, function(filename) { | |||
var lower = filename.toLocaleLowerCase(); | |||
if (lower.length >= name_dot.length && lower.substr(0, name_dot.length) === name_dot) { | |||
files.push(lower); | |||
} | |||
}); | |||
if (files.length < 2) { | |||
return; | |||
} | |||
files.sort(); | |||
var curr = index_of(name, files); | |||
if (curr < 0) { | |||
return files[0]; | |||
} | |||
return path + files[(curr + 1) % files.length]; | |||
} | } | ||
function split_at_dot(str) | function split_at_dot(str) { | ||
{ | var i = str.lastIndexOf('.'); | ||
return i >= 0 && [str.substr(0, i + 1), str.substr(i + 1)]; | |||
} | } | ||
function index_of(x, array) | function index_of(x, array) { | ||
{ | for (var i = 0; i < array.length; i++) { | ||
if (array[i] === x) { | |||
return i; | |||
} | |||
} | |||
return -1; | |||
} | } | ||
function each_file(path, callback) | function each_file(path, callback) { | ||
{ | return enumerate(FS.GetFolder(path).Files, function(e) { | ||
return callback(e.Name); | |||
}); | |||
} | } | ||
function enumerate(collection, callback) | function enumerate(collection, callback) { | ||
{ | for (var e = new Enumerator(collection); !e.atEnd(); e.moveNext()) { | ||
var result = callback(e.item()); | |||
if (result) { | |||
return result; | |||
} | |||
} | |||
} | } | ||
main() | main(); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
スポンサーリンク