エンティティ参照と文字参照
Mery マクロ: エンティティ参照と文字参照 (Entity Reference and Character Reference)
選択範囲にあるエンティティ参照と文字参照を置換
5つの XML エンティティ参照と文字参照を置換
& … & (アンパサンド)
< … < (less 開き山括弧)
> … > (more 閉じ山括弧)
" … " (二重引用符)
' … ' (アポストロフィ)
○ 検索した複数の語や文字の、対応する複数の語や文字への置換
置換の途中で、括弧で捕獲した部分文字列( p1 )を、関数で受け取り、関
数内で必要な処理をしてから、その処理結果を括弧の値として、置換する。
この「コールバック関数置換(ラムダ式)」は、Mery の正規表現置換では、
できない。そこで、マクロでは JavaScript の正規表現を replace で使う。
置換先の語の中に、置換元の文字が含まれているので( & の中の & )、
相互置換(交換)の、ひとつのマクロにはせず、片方向ずつ別々にした。
※ マクロitokusu_EntityRef: ファイル:itokusu EntityRef.zip
エンティティ参照(Ctrl+Alt+E).js
文字参照(Ctrl+Alt+C).js
下の内容を、上の名前のファイルにして、 My Macros\itokusu に置く。
もしフォルダがなければ、itokusu フォルダを作成してからコピー。
そこから Mery で開いて、マクロ - これを選択、
ツール - オプション - キーボード の マクロ で Ctrl+Alt+E に割り当て。
ツール - オプション - キーボード の マクロ で Ctrl+Alt+C に割り当て。
または…、
マクロitokusu の使い方:
フォルダ付きで展開したら、itokusu フォルダを My Macros にコピー。
(すでにフォルダがあれば、そのフォルダ内にファイルを追加コピー)
マクロ - カスタマイズ - 新規作成 で、 My Macros\itokusu フォルダ
を選択、Ctrlキーを押しながらファイル名をクリックで、登録しようと
している複数のマクロをすべて選択してから - 開く。
エンティティ参照(Ctrl+Alt+E).js
は、
ツール - オプション - キーボード の マクロ で Ctrl+Alt+E に割り当て。
文字参照(Ctrl+Alt+C).js
は、
ツール - オプション - キーボード の マクロ で Ctrl+Alt+C に割り当て。
// - 糸くす~------------------------------------- Copyright(C)2011-2012 inuuik -
// エンティティ参照(Ctrl+Alt+E)
//
// 選択範囲にある文字参照を XML エンティティ参照に
// & … & (アンパサンド)
// < … < (より小・ 開き山括弧)
// > … > (より大・閉じ山括弧)
// " … " (二重引用符)
// ' … ' (アポストロフィ)
// すべて書き換える。
//
// エンティティ参照の1文字目の &(アンパサンド)は、重ねて置換しない。
// その文字を置換するときは、1文字目の &(アンパサンド)だけを選択。
//
// revised inuuik 2011-09-25
// revised inuuik 2012-09-20
// - ------------------------ --------------------------------------------------
{
var s = document.selection;
var x = s.GetActivePointX(mePosView);
var y = s.GetActivePointY(mePosView);
var tx = s.GetTopPointX(mePosView);
var ty = s.GetTopPointY(mePosView);
var bx = s.GetBottomPointX(mePosView);
var by = s.GetBottomPointY(mePosView);
Redraw = false;
if (!s.IsEmpty) {
var t = s.Text;
// s.Text = t.replace(/([&<>"'])/g,
s.Text = t.replace(/(?!&|<|>|"|')([&<>"'])/g,
function(str, p1, offset, s) {
var aSpeCh = {'&':'&', '<':'<', '>':'>', '"':'"', '\'':'''};
return(aSpeCh[p1]);
}
);
}
if (x === tx && y === ty) {
s.SetAnchorPoint(mePosView, bx, by);
s.SetActivePoint(mePosView, tx, ty, true);
}
else {
s.SetAnchorPoint(mePosView, tx, ty);
s.SetActivePoint(mePosView, bx, by, true);
}
Redraw = true;
}
// - ------------------------ --------------------------------------------------
// - 糸くす~------------------------------------- Copyright(C)2011-2012 inuuik -
// 文字参照(Ctrl+Alt+C)
//
// 選択範囲にある XML エンティティ参照を文字参照に
// & … & (アンパサンド)
// < … < (より小・開き山括弧)
// > … > (より大・閉じ山括弧)
// " … " (二重引用符)
// ' … ' (アポストロフィ)
// すべて書き換える。
//
// revised inuuik 2011-09-25
// revised inuuik 2012-09-20
// - ------------------------ --------------------------------------------------
{
var s = document.selection;
var x = s.GetActivePointX(mePosView);
var y = s.GetActivePointY(mePosView);
var tx = s.GetTopPointX(mePosView);
var ty = s.GetTopPointY(mePosView);
var bx = s.GetBottomPointX(mePosView);
var by = s.GetBottomPointY(mePosView);
Redraw = false;
if (!s.IsEmpty) {
var t = s.Text;
s.Text = t.replace(/(&|<|>|"|')/g,
function(str, p1, offset, s) {
var aEntRe = {'&':'&', '<':'<', '>':'>', '"':'"', ''':'\''};
return(aEntRe[p1]);
}
);
}
if (x === tx && y === ty) {
s.SetAnchorPoint(mePosView, bx, by);
s.SetActivePoint(mePosView, tx, ty, true);
}
else {
s.SetAnchorPoint(mePosView, tx, ty);
s.SetActivePoint(mePosView, bx, by, true);
}
Redraw = true;
}
// - ------------------------ --------------------------------------------------
スポンサーリンク