サクラエディタで辞書変換っぽいマクロ

dic.txtには

訳元\t訳後

で羅列しておく。
変換したい箇所は[]で囲っておく。


var dicPath = "c:\dic.txt";

main();

function main(){
var a = new Array();
var dic = getDictionary();
var rep = getReplaceList();
var repArea = IsTextSelected() == 0 ? 0 : 128;
for (var i = 0; i < rep.length; i++) {
var target = rep[i].replace("[", "").replace("]", "");
ReplaceAll(target, dic[target], repArea);
}
}

function getReplaceList() {
var replaceList = new Array();
var registedList = new Array();
if (IsTextSelected() == 0) {
for (var i = 1; i <= GetLineCount(0); i++) {
var mc = GetLineStr(i).match(/\[[^\]]+\]/g);
if (mc == null) {
continue;
}
for (var j = 0; j < mc.length; j++) {
if (registedList[mc[j]] == null) {
registedList[mc[j]] = mc[j];
replaceList.push(mc[j]);
}
}
}
} else {
var targetArea = GetSelectedString(0).split("\r\n");
for (var i = 0; i < targetArea.length; i++) {
var mc = targetArea[i].match(/\[[^\]]+\]/g);
if (mc == null) {
continue;
}
for (var j = 0; j < mc.length; j++) {
if (registedList[mc[j]] == null) {
registedList[mc[j]] = mc[j];
replaceList.push(mc[j]);
}
}
}
}
return replaceList;
}

function getDictionary() {
var dicFile = new ActiveXObject("Scripting.FileSystemObject").OpenTextFile(dicPath, 1);
var stopOverFlow = 100000;
var cnt = 1;
var dic = new Array();
while(!dicFile.AtEndOfStream) {
if (cnt++ > stopOverFlow) {
msgBox("おーばーふろー");
break;
}
var readLine = dicFile.ReadLine();
var readLineSplit = readLine.split("\t");
dic[readLineSplit[0]] = readLineSplit[1];
}
dicFile.Close();
return dic;
}

function msgBox(msg) {
var WSHShell = new ActiveXObject("WScript.Shell");
WSHShell.Popup(msg, 0, "メッセージ", 0);
}