「テキスト変換」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
Ks (トーク | 投稿記録)
編集の要約なし
Ks (トーク | 投稿記録)
編集の要約なし
17行目: 17行目:
== コード ==
== コード ==
=== 拡張コード ===
=== 拡張コード ===
'''ご自由に追加してください!'''
* 大文字に変換
* 大文字に変換
<source lang="javascript">
<source lang="javascript">
134行目: 136行目:
})();
})();
</source>
</source>
== ご意見・ご要望 ==
何かありましたら,右の [編集] から追記してください.対応するもかしれません.

2013年1月24日 (木) 00:08時点における版

概要

開いているドキュメントのテキストを変換します.

特徴

  • 機能追加が簡単.

使用方法

  1. 基本コードを拡張子 .js で保存します.
  2. 必要な拡張コードを追加します.
    • 「拡張機能の追加」とある場所に,コードをコピペすれば拡張が可能です.
    • 上から順にポップアップに表示されます.
    • f[f.length] = "--";
      でセパレータを挿入できます(- の数は任意).
  3. マクロを実行すると登録されている機能の一覧が表示されるので,選択して実行します.
    • テキストを選択している場合は,対象を「選択テキスト」「全体」から選べます.
    • テキストを選択していない場合は「全体」が対象です.

コード

拡張コード

ご自由に追加してください!

  • 大文字に変換
f[f.length] = {
  title:"大文字に変換",
  replace:function(text){ return text.toUpperCase() }
};
  • 小文字に変換
f[f.length] = {
  title:"小文字に変換",
  replace:function(text){ return text.toLowerCase() }
};
  • カンマ前後の空白を削除
f[f.length] = {
  title:"カンマ前後の空白を削除",
  replace:function(text){ return text.replace(/^[ \t ]+|[ \t ]+$/mg, "").replace(/[ \t ]*,[ \t ]*/mg, ","); }
};
  • BASE64エンコード(Unicode)
f[f.length] = {
  title:"BASE64エンコード(Unicode)",
  replace:function(text){
    var map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
    var Ch = function(n){ return n<text.length ? text.charCodeAt(n) : 0 };
    var len = text.length, pad = len % 3, s = "";
    for (var i=0; i<len; i+=3) {
      var tmp = (Ch(i)<<16) | (Ch(i+1)<<8) | Ch(i+2);
      s += map[(tmp>>>18)&0x3F] + map[(tmp>>>12)&0x3F] + map[(tmp>>>6)&0x3F] + map[tmp&0x3F];
    }
    if (pad) { s = s.substring(0, s.length-(3-pad)) + "===".substring(pad) }
    return s;
  }
};

基本コード

#title = "テキスト変換"
// -----------------------------------------------------------------------------
// 手軽にテキスト変換を行うためのマクロ
// -----------------------------------------------------------------------------
var f = [];

// 拡張機能の追加
// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

f[f.length] = {
  title:"行頭の空白文字を削除",
  replace:function(text){ return text.replace(/^[ \t ]+/mg, "") }
};
f[f.length] = {
  title:"行末の空白文字を削除",
  replace:function(text){ return text.replace(/[ \t ]+$/mg, "") }
};
f[f.length] = {
  title:"行頭・行末の空白文字を削除",
  replace:function(text){ return text.replace(/^[ \t ]+|[ \t ]+$/mg, "") }
};
f[f.length] = {
  title:"空白行を削除",
  replace:function(text){ return text.replace(/^\n/mg, "") }
};

// ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

// 実行
(function(){
  var popup = CreatePopupMenu();
  var selPopup = null;
  var docPopup = popup;

  var SELECTION_ID = 0x1000;
  var DOCUMENT_ID  = 0x2000;

  // 選択文字列があるときは選択肢追加
  var sel = document.Selection;
  if (sel.Text) {
    selPopup = CreatePopupMenu();
    docPopup = CreatePopupMenu();
    popup.AddPopup("選択文字列", selPopup);
    popup.AddPopup("全体", docPopup);
  }

  // 選択肢追加
  for (var i=0; i<f.length; i++) {
    if (typeof f[i]["title"] == "string" && typeof f[i]["replace"] == "function") {
      if (selPopup) {
        selPopup.Add(f[i].title, SELECTION_ID+i);
      }
      docPopup.Add(f[i].title, DOCUMENT_ID+i);
    } else if (typeof f[i] == "string" && /^-+$/.test(f[i])) {
      // セパレータ処理
      if (selPopup) {
        selPopup.Add("", 0, meMenuSeparator);
      }
      docPopup.Add("", 0, meMenuSeparator);
      
    }
  }

  // ポップアップを表示して選択されたコマンドを実行
  var mePosCaret = 0;
  var select = popup.Track(mePosMouse);
  if (select > 0) {
    if (select & SELECTION_ID) {
      sel.Text = f[select-SELECTION_ID].replace(sel.Text, sel);
    } else {
      sel.SelectAll();
      Document.Text = f[select-DOCUMENT_ID].replace(Document.Text, sel);
    }
  }
})();

ご意見・ご要望

何かありましたら,右の [編集] から追記してください.対応するもかしれません.

スポンサーリンク