「エンティティ参照と文字参照」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
Inuuik (トーク | 投稿記録)
編集の要約なし
Inuuik (トーク | 投稿記録)
ページの白紙化
 
1行目: 1行目:
Mery エディタ マクロ:  エンティティ参照と文字参照 (Entity Reference and Character Reference)  ( inuuik )
<pre>
  選択範囲にあるエンティティ参照と文字参照を置換


  5つの XML エンティティ参照と文字参照を置換
    &amp;  … &  (アンパサンド)
    &lt;    … <  (less 開き山括弧)
    &gt;    … >  (more 閉じ山括弧)
    &quot;  … "  (二重引用符)
    &apos;  … '  (アポストロフィ)
  ○ 検索した複数の語や文字の、対応する複数の語や文字への置換
    置換の途中で、括弧で捕獲した部分文字列( p1 )を、関数で受け取り、関
    数内で必要な処理をしてから、その処理結果を括弧の値として、置換する。
    この「コールバック関数置換(ラムダ式)」は、Mery の正規表現置換では、
    できない。そこで、マクロでは JavaScript の正規表現を replace で使う。
    置換先の語の中に、置換元の文字が含まれているので( &amp; の中の & )、
    相互置換(交換)の、ひとつのマクロにはせず、片方向ずつ別々にした。
</pre>
※ マクロitokusu_EntityRef: [[ファイル:itokusu_EntityRef.zip]]
<pre>
エンティティ参照(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 に割り当て。
</pre>
<source lang="javascript">
// - 糸くす~------------------------------------- Copyright(C)2011-2012 inuuik -
// エンティティ参照(Ctrl+Alt+E)
//
//  選択範囲にある文字参照を XML エンティティ参照に
//    &  … &amp;  (アンパサンド)
//    <  … &lt;    (より小・ 開き山括弧)
//    >  … &gt;    (より大・閉じ山括弧)
//    "  … &quot;  (二重引用符)
//    '  … &apos;  (アポストロフィ)
//  すべて書き換える。
// 
//  エンティティ参照の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(/(?!&amp;|&lt;|&gt;|&quot;|&apos;)([&<>"'])/g,
      function(str, p1, offset, s) {
        var aSpeCh = {'&':'&amp;', '<':'&lt;', '>':'&gt;', '"':'&quot;', '\'':'&apos;'};
        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;
}
// - ------------------------ --------------------------------------------------
</source>
<source lang="javascript">
// - 糸くす~------------------------------------- Copyright(C)2011-2012 inuuik -
// 文字参照(Ctrl+Alt+C)
//
//  選択範囲にある XML エンティティ参照を文字参照に
//    &amp;  … &  (アンパサンド)
//    &lt;    … <  (より小・開き山括弧)
//    &gt;    … >  (より大・閉じ山括弧)
//    &quot;  … "  (二重引用符)
//    &apos;  … '  (アポストロフィ)
//  すべて書き換える。
//
// 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(/(&amp;|&lt;|&gt;|&quot;|&apos;)/g,
      function(str, p1, offset, s) {
        var aEntRe = {'&amp;':'&', '&lt;':'<', '&gt;':'>', '&quot;':'"', '&apos;':'\''};
        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;
}
// - ------------------------ --------------------------------------------------
</source>

2013年1月15日 (火) 00:09時点における最新版

スポンサーリンク