MacのCotEditorのマクロ作ってみた。
タブ区切りのテキストをHTMLのtableタグに変換する
で、CotEditor用にマクロ作ったんだが、Windowsのサクラエディタのマクロでも作って見た。

サクラエディタのマクロはJScript、VBScript、PPAとか使えるけど、JScriptを使うことにする。
JScriptには、Editorオブジェクトが提供されていて、それのメソッドを呼び出すことで操作する。

作ったマクロは↓だ。

選択しているところの&を&amp;、<を&lt;、>を&gt;に変換して、行頭に<p>をつけて、行末に</p>を付けるマクロ

// 選択されている文字列を取得
var text = Editor.GetSelectedString(0);

// 改行で分割
var lines = [];
var lineCodes = [];
var str = "";
for (var i = 0; i < text.length; i++) {
	var ch = text.substr(i, 1);
	if (ch === "\r") {
		var tmpstr = "\r";
		if (i + 1 < text.length && text.substr(i + 1, 1) == "\n") {
			i++;
			tmpstr += "\n";
		}
		lines.push(str);
		str = "";
		lineCodes.push(tmpstr);
	}
	else if (ch === "\n") {
		lines.push(str);
		str = "";
		lineCodes.push("\n");
	}
	else {
		str += ch;
	}
}
if (str != "") {
	lines.push(str);
	lineCodes.push("");
}

for (var i = 0; i < lines.length; i++) {
	lines[i] = lines[i].replace(/&/g, "&amp;")	// &を&amp;に置換
			.replace(/</g, "&lt;")				// <を&lt;に置換
			.replace(/>/g, "&gt;")				// >を&gt;に置換
			.replace(/^/g, "<p>")				// 行頭に<p>を追加
			.replace(/$/g, "</p>");				// 行末に</p>を追加
}

// すべての行を改行コードでつないで設定する
str = "";
for (var i = 0; i < lines.length; i++) {
	str += lines[i] + lineCodes[i];
}
Editor.InsText(str);

HTMLタグを削除するマクロ

// 選択されている文字列を取得
var text = Editor.GetSelectedString(0);

// 改行で分割
var lines = [];
var lineCodes = [];
var str = "";
for (var i = 0; i < text.length; i++) {
	var ch = text.substr(i, 1);
	if (ch === "\r") {
		var tmpstr = "\r";
		if (i + 1 < text.length && text.substr(i + 1, 1) == "\n") {
			i++;
			tmpstr += "\n";
		}
		lines.push(str);
		str = "";
		lineCodes.push(tmpstr);
	}
	else if (ch === "\n") {
		lines.push(str);
		str = "";
		lineCodes.push("\n");
	}
	else {
		str += ch;
	}
}
if (str != "") {
	lines.push(str);
	lineCodes.push("");
}

for (var i = 0; i < lines.length; i++) {
	lines[i] = lines[i].replace(/<[^>]*>/g, "");
}

// すべての行を改行コードでつないで設定する
str = "";
for (var i = 0; i < lines.length; i++) {
	str += lines[i] + lineCodes[i];
}
Editor.InsText(str);

タブ区切りのテキストを表にするマクロ

// 選択されている文字列を取得
var text = Editor.GetSelectedString(0);

// 改行で分割
var lines = [];
var lineCodes = [];
var str = "";
for (var i = 0; i < text.length; i++) {
	var ch = text.substr(i, 1);
	if (ch === "\r") {
		var tmpstr = "\r";
		if (i + 1 < text.length && text.substr(i + 1, 1) == "\n") {
			i++;
			tmpstr += "\n";
		}
		lines.push(str);
		str = "";
		lineCodes.push(tmpstr);
	}
	else if (ch === "\n") {
		lines.push(str);
		str = "";
		lineCodes.push("\n");
	}
	else {
		str += ch;
	}
}
if (str != "") {
	lines.push(str);
	lineCodes.push("");
}

var lineCode;
switch (Editor.GetLineCode()) {
	case 0:
		lineCode = "\r\n";
		break;
	case 1:
		lineCode = "\r";
		break;
	case 2:
		lineCode = "\n";
		break;
}

str = "<table>" + lineCode;
for (var i = 0; i < lines.length; i++) {
	var strs = lines[i].split(/\t/);
	str += "\t<tr>" + lineCode;
	for (var j = 0; j < strs.length; j++) {
		if (i === 0) {
			str += "\t\t<th>" + strs[j] + "</th>" + lineCode;
		}
		else {
			str += "\t\t<td>" + strs[j] + "</td>" + lineCode;
		}
	}
	str += "\t</tr>" + lineCode;
}
str += "</table>" + lineCode;
Editor.InsText(str);

これらを~.jsと保存し、[設定]-[共通設定]の[マクロ]タブで名前とファイルを設定すると[ツール]-[登録済みマクロ]から実行できる。

※C言語の#includeみたいなのがあれば、改行コードで分割するところを関数にして読み込むようにするんだけどな~