2013年11月14日

EmEditorマクロ・html文書にbrタグ挿入

 この記事も含めて、まとめはこちらLink

 私はブログを書く時にhtml形式の書式をよく使うが、この場合、改行は全て<br />タグを挿入しないといけない。
 手動でbrタグを入れる時は、EmEditorでこのようなマクロを使えばいい。
// <br />タグ挿入
document.selection.Text="<br />\n";
 これをマイマクロで登録して、「Shift+Enter」など好きなキーボードに割り当てればOK。
 また、文書内の改行を一度に全てbrタグにしたい場合は、
// 行末の改行を<br />タグに変換
document.selection.Replace( "\\n" , "<br />\\n"
    , eeReplaceAll | eeFindReplaceRegExp );
 戻すには、
// 行末の<br />タグを全削除
if ( document.selection.IsEmpty ) { // 範囲指定が無い場合
    document.selection.SelectAll(); // 全て選択
}
document.selection.Replace( "<br />\\n" , "\\n"
    , eeReplaceSelOnly | eeFindReplaceRegExp | eeReplaceAll );
 でいいが、この場合、htmlタグなどにも余計なbrタグが付いてしまう。
 そこで、タグ以外のものだけにbrタグを付ける方法は無いか、1行ずつ見ようと思ったら、<pre>などで複数行にまたがるものは上手くいかない、うーむ・・・。

 と考えて、方法として、

「一度全ての改行に<br />タグを挿入して、対応タグがある範囲だけ<br />を削除」

 という方法ならできそうだなと思い、作ってみた。

処理方法

 マクロプログラムとして長くなったので、リストは記事を分けた。

EmEditorマクロ・brタグ挿入のリスト

 ここでは、その解説を。
 手順としては先に書いた通り、全ての改行に<br />タグを挿入してから、対象の部分だけ削除する流れだが、削除対象のタグを指定するのが、

NotTag = new Array(  // 除外タグ指定

の部分で、そこに入れた文字列の内容で、次々と検索して削除していく。
 また、各文字列には先頭に「/」「,」の文字を入れて、それによって動作を分けている。
 各文字の意味は、
  • /・・・指定タグ間を、行をまたいだ間も対象
    例:/pre → <pre>〜</pre>の間
  • ,・・・< >〜</ >と違う形式のタグ間を、行をまたいだ間も対象で、開始タグと終了タグの間にも,を入れる。
    例:,<!--,--> → <!--〜-->の間
  • それ以外・・・指定の開始タグ、終了タグ2行のみが対象
    例:html → <html>と</html>が入った行

 タグによっては形式の違うもの、htmlタグなど「行もまたいだタグ間」が対象だったら文書全てになったり、ulなどで二重タグ間の処理が困難など都合の悪いものに対処するため、この3種類を作った。

置換方法

 先に挙げた3種類の方法で、各処理としては、
  • 指定タグ間を、行をまたいだ間も対象:
    次の正規表現で2回検索。
     検索文字列(開始タグ):< *pre.*?>
     検索文字列(終了タグ):<[ /]*pre *>
    タグの中にスペースやクラス指定などの文字が入っていても処理できるようにしているが、見つかった各場所のY座標を記憶。後でその行間を範囲指定、範囲内の行末にある<br />タグを削除。
    見つからなかった時点で処理終了。
  • < >〜</ >と違う形式のタグ間:
    先のものと処理は同じだが、検索文字列はそのままで正規表現を使っていないだけ。
  • 指定の開始タグ、終了タグ2行のみが対象:
    次の正規表現を使って一括置換を行っているだけ。
     検索文字列:(<[ /]*html.*?>)<br />\n
     置換文字列:\1\n

実際使えるか?

 そもそもこのマクロ、私がブログを書く時にhtml形式を多く使うようになったので、この方がいいだろうかと作ってみたのだが、Seesaaブログは普通のテキスト文書でも行末にbrコードを自動で付けて投稿できるので、別に使わなくてもいい(設定でどちらでも可能)。
 試しにこの記事はマクロを使いながら書いているが、今までとどちらがいいかは・・・、正直、微妙w

 しばらく使ってみて、自分にとってこの形式で行くか、また元に戻るかは分からないけど、処理方法を考える勉強にはなった。
 と言う事で、EmEditorを使ってhtml文書を書かれている方で、これが何らかのお役に立てたら幸いと言う事で。



タグ:EmEditor

posted by 司隆 at 21:03 | Comment(0) | Computer
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。