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

提供: MeryWiki
ナビゲーションに移動 検索に移動
Ks (トーク | 投稿記録)
ページの作成:「== 概要 == 開いているドキュメントのテキストを変換します. == 特徴 == * 機能追加が簡単. == 使用方法 == # 基本コードを拡...」
 
Ks (トーク | 投稿記録)
編集の要約なし
10行目: 10行目:
#*「拡張機能の追加」とある場所に,コードをコピペすれば拡張が可能です.
#*「拡張機能の追加」とある場所に,コードをコピペすれば拡張が可能です.
#* 上から順にポップアップに表示されます.
#* 上から順にポップアップに表示されます.
#* <code>f[f.length] = "--";</code><br>でセパレータを挿入します(- の数は任意).
#* <code>f[f.length] = "--";</code><br>でセパレータを挿入できます(- の数は任意).
# マクロを実行すると登録されている機能の一覧が表示されるので,選択して実行します.
# マクロを実行すると登録されている機能の一覧が表示されるので,選択して実行します.
#* テキストを選択している場合は,対象を「選択テキスト」「全体」から選べます.
#* テキストを選択している場合は,対象を「選択テキスト」「全体」から選べます.

2013年1月23日 (水) 23:21時点における版

概要

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

特徴

  • 機能追加が簡単.

使用方法

  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);
    }
  }
})();
スポンサーリンク