Macro/投稿/206 の変更点

http://sakura.qp.land.to/?Macro%2F%C5%EA%B9%C6%2F206


Top > Macro > 投稿 > 206

* 改行コードの混在警告&統一 [#a24bcaca]
-ページ: [[Macro/投稿]]
-作者: [[971]]
-カテゴリー: js
-投稿日: 2009-11-25 (水) 10:39:59

** メッセージ [#n7c975f7]
&size(14){自動実行マクロ(開ファイル後やファイル保存前)に割り当てて使うと便利かも};
#code(javascript){{
// 【UnifyEol.js】
// 改行コードが混在していたら警告&統一する
// ★正規表現にbregonig.dllが必要★

// sakura 2.0.3.0 以降ならメッセージボックス系のマクロ専用関数がある
var strVer = Editor.ExpandParameter("$V");
var arrVer = strVer.split(".");
var bMsgBoxSupport = (arrVer[0] >= 3 || (arrVer[0] == 2 && arrVer[1] >= 1) || (arrVer[0] == 2 && arrVer[2] >= 3));

var strEol;
var strFind;
var strReplace;
switch (Editor.GetLineCode())
{
case 1:
	strEol = "CR"
	strFind = "\\r\\n|(?<!\\r)\\n";
	strReplace = "\\r";
	break;
case 2:
	strEol = "LF"
	strFind = "\\r\\n|\\r(?!\\n)";
	strReplace = "\\n";
	break;
default:
	strEol = "CRLF"
	strFind = "\\r(?!\\n)|(?<!\\r)\\n";
	strReplace = "\\r\\n";
	break;
}

Editor.CancelMode();
Editor.SearchNext(strFind, 36);
if (Editor.IsTextSelected() != 0)
{
	Editor.MoveHistPrev();
	Editor.SearchClearMark();
	var bYes;
	var strMsg = "改行コードが混在しています。\n現在の入力改行コード(" + strEol + ")に統一しますか?";
	if (bMsgBoxSupport) // メッセージボックス系の専用関数がある
	{	// Editor.YesNoBox() を使う
		bYes = (Editor.YesNoBox(strMsg) == 6);
	}
	else
	{	// WScript.Shell の Popup() を使う
		// ※ Popup() ではエディタ画面をクリックするとメッセージがエディタの背後に隠れてしまうことがある
		var WSHShell = new ActiveXObject("WScript.Shell");
		bYes = (WSHShell.Popup(strMsg, 0, "改行コード混在", 4) == 6);
	}
	if ( bYes )
	{
		Editor.ReplaceAll(strFind, strReplace, 4);
		Editor.MoveHistPrev();
	}
}
}}

----
- 無警告で統一したければ行33を削除するだけでできます -- [[971]] &new{2009-11-25 (水) 11:06:09};
- あと、ファイル名の拡張子を見て警告・統一する/しないを判定するとか、文字コードがEUCならLFに統一するとか、好みにあわせてカスタマイズしたらいい。 -- [[971]] &new{2009-11-25 (水) 11:11:02};
- 2.0.3.0以降ならYesNoBox()を使うようにしました -- [[971]] &new{2012-02-28 (火) 10:44:19};

#comment

    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS