HTML Tidyをサクラエディタのマクロから呼び出す - Bouldering & Com.で書いたのの修正。
前の版だといちど保存してから押さなきゃいけなかったけど、どうせテンプファイルにtidyの結果を吐かせる必要があったので、先にテンプファイルに編集中のファイル内容を吐き出して、それに対してtidyをかけるように変えた。
少しマシになったけど、HTMLtidyはCSSとJSは整形対象になってないぽいのでやっぱり不満が残る。
CSS整形とJS整形は別のやつ使うか。
(function(){ var _tidy_home = "C:\\tidy_jp_win\\"; var _tidy_bin = "bin\\tidy.exe"; var _tidy_conf = "sh_tidy.conf"; var _temp_file = _tidy_home + ".temp_for_tidy2"; var _charcode_table = ["shift_jis", "iso-2022-jp", "x-euc-jp", "unicode", "utf-8", "utf-7", "unicodeBE"]; // save temp file //Editor.FileSaveAs(_temp_file, 99, 0); // output current status Editor.SelectAll(); var _f_text = Editor.GetSelectedString(0); access_by_ado(function(stream) { stream.WriteText(_f_text); stream.SaveToFile(_temp_file, 2); return _f_text; }); // execute tidy Editor.ExecCommand(_tidy_home + _tidy_bin + " -quiet -config " + quote(_tidy_home + _tidy_conf) // + " -o " + quote(_temp_file) // + " " + quote(Editor.GetFileName()) + " -m " + quote(_temp_file) , 0); // read temp file _f_text = access_by_ado(function(stream) { stream.LoadFromFile(_temp_file); return stream.ReadText(); }); // del all Editor.SelectAll(); // paste Editor.InsText(_f_text); function quote(_src) { return "\"" + _src + "\""; } function access_by_ado(exec) { var stream = new ActiveXObject("ADODB.Stream"); stream.Type = 2; stream.Charset = _charcode_table[Editor.GetCharCode()]; stream.Open(); var _text = exec(stream); stream.close(); return _text; } function read_by_fso() { var ForReading = 1; var fso = new ActiveXObject("Scripting.FileSystemObject"); var ts = fso.OpenTextFile(_temp_file, ForReading); var _f_text = ts.ReadAll(); ts.Close(); return _f_text; } })();