2012-10-17

EmEditorのマクロでHTMLのコードを整形する

EmEditorでHTMLの整形用のマクロを作成してみました。
HTMLの整形はjsbeautifier.orgの整形が良さそうだったので、jsbeautifierのコードを利用してマクロを作成しました。
jsbeautifierは、JavaScript用のコード整形サービスサイトですが、HTMLとCSSの整形もでき、HTMLとCSSのコード整形用のJavaScriptコードが公開されていたので、そのコードを利用しました。
JavaScript用のマクロはEmEditorマクロでJavaScriptのコードを整形するを見てください。

■目的
JavaScriptのコードをEmEditor上で整形する。
整形には、jsbeautifierのHTML整形コード(beautify-html.js)を使用する。

■環境
OS Windows XP
EmEditor EmEditor Professional (32-bit) Version 11.0.5

■HTML整形コード(beautify-html.js)のダウンロード
jsbeautifier.orgが使用しているHTMLを整形するJavaScriptのコード「beautify-html.js」をhttps://github.com/einars/js-beautifyからダウンロードします(*1)。
*1:この説明では、2012-10-04時点での「beautify-html.js」を使用しています。

■EmEditor用JavaScritp整形マクロファイルの作成
EmEditor用のマクロファイル(beautity-html.jsee)を作成します。

【マクロファイル(beautity-html.jsee)のコード】
#include "include/beautify-html.js";
/*
 beautify for EmEditor
 HTML
 Created by Shinichi Yamaura.
*/
document.selection.SelectAll();
// beautifyのオプション設定
var options = {
 'indent_size': 1,
 'indent_char': '\t',
 'max_char:': 100,
 'brace_style': "end-expand",
 'indent_scripts': "normal"
};
code = document.selection.Text;
// 整形前に改行コードをLFに変換(beautifyのコードを実行用)
code = code.replace(/\r\n/g, '\n');
// beautifyの実行
var code = style_html(code, options);
// 整形後に改行コードをCR+LFに変換
code = code.replace(/\n/g, '\r\n');
document.selection.DestructiveInsert(code);
document.selection.StartOfDocument(false);

■整形マクロの説明
「beautify-html.js」をインクルードして、マクロから「beautify-html.js」を利用しています。
【注意】#includeは、スクリプトのメイン コードの上の最初の行に指定する必要があります。

編集しているコードを「beautify-html.js」の関数「style-html()」を使用して整形し、整形前のコードを上書きして整形後のコードを挿入します。

「style-html()」では、二番目の引数に整形のオプションを指定します。マクロの中で、beautifyのオプション指定をしているので、好みに合わせて設定してください。
beautifyのオプションは「beautify-html.js」のコメントに記載されています。補足説明にコメントに記載されているオプションの説明を整理しました。

マクロ内で、改行コードの置換をしています。これは補足説明を参照してください。

■ファイルの配置
「HTML整形コード(beautify-html.js)」と「マクロファイル(beautify-html.jsee)」をEmEditorマクロフォルダに配置します。
「HTML整形コード」は、EmEditorマクロフォルダ内にサブフォルダ(include)を作成して配置します。

My Macros
│  beautify-html.jsee
│
└─include
        beautify-html.js

■実行方法
EmEditorのマクロで、マクロファイル(beautify-html.jsee)を実行してください。

■補足説明

●改行コード
マクロを作成している時に、改行コードで問題が発生したので、問題とその対応についての説明を記載しておきます。
EmEditorは、改行コードの混在ができるため「js_beautify()」での整形前に、編集しているテキストのコードの改行コードをLFに変換してから整形しています。
「style-html()」で出力されるコードは、改行コードをLFで出力されます。Windowsでは、改行コードをCR+LFにしたいので「js_beautify()」の整形後に、改行コードをCR-LFに変換しています。

●style-html()のオプション
2012-10-04時点
オプション 既定値 説明
indent_size 4 indentation size
indent_char space character to indent with
preserve_newlines true whether existing line breaks should be preserved
max_char 70 maximum amount of characters per line
brace_style "collapse" "collapse" | "expand" | "end-expand" put braces on the same line as control statements (default), or put braces on own line (Allman / ANSI style), or just put end braces on own line
unformatted inline tags list of tags, that shouldn't be reformatted
indent_scripts normal "keep"|"separate"|"normal"

0 件のコメント: