MacのCotEditorのマクロ作ってみた。
タブ区切りのテキストをHTMLのtableタグに変換する
で、CotEditor用にマクロ作ったんだが、Windowsのサクラエディタのマクロでも作って見た。
サクラエディタのマクロはJScript、VBScript、PPAとか使えるけど、JScriptを使うことにする。
JScriptには、Editorオブジェクトが提供されていて、それのメソッドを呼び出すことで操作する。
作ったマクロは↓だ。
選択しているところの&を&、<を<、>を>に変換して、行頭に<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, "&") // &を&に置換
.replace(/</g, "<") // <を<に置換
.replace(/>/g, ">") // >を>に置換
.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みたいなのがあれば、改行コードで分割するところを関数にして読み込むようにするんだけどな~
コメント