2014年01月11日

EmEditor・URLデコード&エンコードマクロ

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


 過去に書いた、Emeditor用マクロ

EmEditor・URLデコードマクロ
EmEditor・URLデコードマクロ改良版

 で、URL文字のデコードをするものを書いたが、デコードだけではなくエンコードも1つのマクロでできるように、言わば、
「デコード←→エンコードのトグル」
をするマクロを作ってみた。
 マクロを実行でカーソル行の文字1列全てを変換するが、デコードかエンコードかは自動判別する。

// カーソル行の文字をエンコード←→デコード

// カーソル行の文字をエンコード←→デコード

// デコード定義
function Decode(Word) {
while( 1 ) { // ループ定義
try {
Word =
decodeURIComponent(Word); // デコード
break; // ループ終了
} catch(e) { // デコード不可の場合
Word = Word.replace
(/%[^%]*$/,""); // 最後の%以降を削除
}
}
return Word; // 変換文字を返す
}

// デコード・エンコード処理
document.selection.
StartOfLine(false,eeLineLogical); // 行の先頭
document.selection.
EndOfLine(true,eeLineLogical); // 最後まで範囲指定
RWord = Decode(document.selection.Text); // デコード呼出
if (document.selection.Text == RWord) // デコードされなければ
RWord = encodeURIComponent
(document.selection.Text); // エンコード
document.selection.Text = RWord; // 書込
document.selection.SetActivePoint
(eePosLogical , 1 ,
document.selection.GetActivePointY(eePosLogical) + 1 ,
false); // 次の行に移動

 このマクロで、次のような文字を
Macro/デコード&エンコード
     ↑
     ↓
Macro%2F%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89%26%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89
 という感じで、お互いの文字をデコード・エンコードできる。

処理についての解説

 処理の流れを分かりやすくするのと、その部分だけ独立して使えるように、デコード部はfunctionの形にした。
 基本的に、以前書いたURLデコードマクロ改良版の処理方法を行っているが、デコード時にエラーが出た時、以前は検索で直前の%に戻る処理を、今回は置換で削除するようにして、デコードした文字列を返すようにしている。
 そのため、リストの長さが大幅に短縮。ていうか、最初からそうするべきだった。

 デコードの後で「デコード前と後で文字が変わらないか」、つまり、デコードされたかを見て、されていなければエンコードをするという処理。
 処理が終わってからは、先に書いた「論理行の移動マクロ」の方法でカーソルを移動している。

 余談ではあるが、以前はデコードの方法として「decodeURI」命令で処理しているが、この時、URLで使用できない文字も変換できる「decodeURIComponent」の存在を知らなかった(汗)。
 まあ、まだまだ勉強不足という事。


(2014/01/12 追記)
 デコードの方法を大幅に修正して、リストも大幅に短縮。




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

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

×

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