「
テキスト整形
」を編集中
2013年12月30日 (月) 11:01時点における
Masme
(
トーク
|
投稿記録
)
による版
(コマンドを4個追加・1個修正。長文の<source>に CSS:overflow を設定。他微修正)
(
差分
)
← 古い版
|
最新版
(
差分
) |
新しい版 →
(
差分
)
ナビゲーションに移動
検索に移動
警告: このページの古い版を編集しています。
公開すると、この版以降になされた変更がすべて失われます。
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、さまざまなメリットもあります。
スパム攻撃防止用のチェックです。 決して、ここには、値の入力は
しない
でください!
<div style="float:right">__TOC__</div> ks 氏作のマクロ「[[テキスト変換]]」の改造版です。<br>※用途が変換に限らなくなったため、名称を変更しました。 【主な改造点】 * [[#拡張コード:コマンド書式|コマンド書式]]を変更した。 ** 簡易書式をベースに単純化。オプション・第2引数は削除。 ** 関数タイプ replace/S/L は、モード R/RS/RM に改称。 * モード F (関数を実行)機能を追加。JScript や Mery の関数をそのまま実行することができます。 * モード CR (連続置換)機能を追加。 * モード RS/RM で行選択した場合、次行行頭を範囲に含めないようにした。 * 範囲選択時に対象範囲を選ぶメニューを廃止した。 * 非選択時に文書全体を対象範囲とする仕様を廃止した。<br>※文書全体を対象にしたい場合は「すべて選択」 (Ctrl+A) してから実行してください。 【注意点】 * マクロの仕様上、矩形置換には対応していません。<br>※Mery 2.1.0 以降の Replace 関数を利用すれば一応は可能です。 * 表示行での処理には対応していません。<br>※このページで解説される <b>各行・行頭・行末</b> という言葉は、論理行を基準としています。 =スターターパック= ダウンロード→[[ファイル:テキスト整形.zip]] (2013/12/30版)<br>※基本コード と [[#拡張コード|拡張コード]](★印の項目) をまとめた、入門用パックです。 =更新履歴= * <b>2013/12/30</b> ** コマンド追加 - 挿入 confirm(|)/★数値を3桁区切りに/★16進数に変換/★10進数に変換 ** コマンド修正 - My Macros フォルダを開く<br>マクロの場所からではなく Mery 本体の場所からパスを取得するようにした。 =基本コード= <source lang="javascript" style="height:20em; overflow:auto;"> //■テキスト整形 // 2013/09/15-2013/12/30 //■拡張コード:コマンド一覧 var f = []; // ----------------- ↓ここより下に拡張コードを追加 // ----------------- ↑ここより上に拡張コードを追加 /*■拡張コード:コマンド書式 //▼コマンド f.push(["コマンド名","モード",function(引数){マクロ}]); 【モード】 F (Function) - 関数を実行 R (Replace) - 選択範囲を置換 RS (Select-line) - 選択範囲を行頭末まで拡張して置換 RM (Multi-line) - 選択範囲を一行ごとに分割して置換 CR (Chain) - リスト(配列)を元に連続置換 【引数】 (モード F) - Document.Selection (モード R/RS/RM) - Document.Selection.Text (モード CR) - (引数なし) //▼サブメニュー f.push(["メニュー名",function(f){コマンドなど}]); //▼セパレータ f.push(["----"]); // ----------------- */ //■実行コード (function(){ var sel = Document.Selection; var cmd = [], cid = 1; //コマンド格納用,ID //メニュー生成用関数 function ListToMenu(List, Menu) { for (var i=0; i<List.length; i++) { var L = List[i], Ln = L.length; if (typeof L[0] != "string") continue; switch (true) { case (Ln==3): //コマンド L = ["コマンド名","モード",function] if (typeof L[2] == "function" && /^(F|R|RS|RM|CR)$/.test(L[1])) { cmd[cid] = {"mode":L[1], "func":L[2]}; Menu.Add(L[0]+"\t"+L[1], cid++); } break; case (Ln==2): //サブメニュー L = ["メニュー名",function] if (typeof L[1] == "function") { var sub_popup = CreatePopupMenu(); Menu.AddPopup(L[0], sub_popup); var sub_f = []; L[1](sub_f); ListToMenu(sub_f, sub_popup); //再帰処理:サブメニュー作成 } break; case (Ln==1): //セパレータ L = ["----"] if (/^-+$/.test(L[0])) { Menu.Add("", 0, meMenuSeparator); } break; } } }; //コマンド一覧からメニュー生成 var popup = CreatePopupMenu(); ListToMenu(f, popup); //ポップアップメニューを表示して処理 var tr = popup.Track(mePosMouse); if (tr) { //※キャンセル(Esc)時は0が返る var sx = ScrollX, sy = ScrollY; //画面位置の保持 var C = cmd[tr]; switch (C["mode"]) { case "F": //関数を実行 C["func"](sel); break; case "R": //選択範囲を置換 sel.Text = C["func"](sel.Text); break; case "RS": //行頭行末まで拡張 sel.Text = C["func"](SelectLine(sel)); break; case "RM": //一行ごとに処理 sel.Text = MultiLine(C["func"], sel); break; case "CR": //連続置換 sel.Text = ChainReplace(C["func"](), sel); break; } ScrollX = sx; ScrollY = sy; } //モード RS/RM 用関数:選択範囲を行頭行末まで拡張して返す function SelectLine(sel) { var meP = mePosLogical; var ty = sel.GetTopPointY(meP); //範囲開始行 var by = sel.GetBottomPointY(meP); //範囲終了行 var bx = sel.GetBottomPointX(meP); if (ty!=by && bx==1) by--; //行選択時、次の行を含めない sel.SetActivePoint(meP, 1, by); sel.EndOfLine(false, meP); sel.SetAnchorPoint(meP, 1, ty); return sel.Text; }; //モード RM 用関数:選択範囲を一行ごとに分割して処理 function MultiLine(func, sel) { var lines = SelectLine(sel).split("\n"); var result = []; for (var i=0; i<lines.length; i++) { var text = func(lines[i]); if (text != null) result.push(text); } return result.join("\n"); }; //モード CR 用関数:リストに従い選択範囲を連続置換 function ChainReplace(list, sel) { var text = sel.Text; for (var i=0; i<list.length; i++) { text = text.replace(new RegExp(list[i][0],"g"),list[i][1]); } return text; }; })(); </source> =拡張コード:コマンド= * (移植) の項目は、「[[テキスト変換]]」から移植したコマンドです。 * ★印の項目は、スターターパックに含まれているコマンドです。 ==小説/作文 用途== ;★地の文の行頭を字下げ :改行文字/半角空白/全角空白/水平タブ/左引用符<tt style="color:#090;">‘ “ </tt>/開き括弧<tt style="color:#090;"> ( 〔 [ { 〈 《 「 『 【 </tt><b style="color:#c00;">以外</b>の文字で始まる行を「地の文」とみなし、行頭に全角空白を挿入します。 <source lang="javascript"> f.push(["地の文の行頭を字下げ","RS",function(a){ return a.replace(/^([^\n \t‘“(〔[{〈《「『【])/mg," $1") }]); </source> ;★括弧前の句読点を削除 :右引用符<tt style="color:#090;"> ’ ” </tt>/閉じ括弧<tt style="color:#090;"> ) 〕 ] } 〉 》 」 』 】 </tt>の直前に 、 。 (句読点)がある場合、除去します。 <source lang="javascript"> f.push(["括弧前の句読点を削除","R",function(a){ return a.replace(/[、。]([’”)〕]}〉》」』】])/g,"$1") }]); </source> ;★三点リーダー(……)に整形 :3文字以上連続する ・・・ (中黒)/ 。。。(句点)/ 、、、(読点)を、三点リーダー2文字 …… に整形します。 :例> <span style="background:#bfdfff;">そんな・・・・。</span> → そんな……。 <source lang="javascript"> f.push(["三点リーダー(……)に整形","R",function(a){ return a.replace(/・{3,}|。{3,}|、{3,}/g,"……") }]); </source> ==Web/HTML 用途== ;★HTMLタグを除去 <source lang="javascript"> f.push(["HTMLタグを除去","R",function(a){ return a.replace(/<(".*?"|'.*?'|[^'"])*?>/mg,"") }]); </source> ;★実体参照変換 :HTML / XML で使用される文字実体参照の変換を行います。 :{| class="wikitable" !文字 || || 実体参照 || 備考 |- |align="center"| < ||rowspan="4"|⇔ || &lt; || 小なり不等号 (less than) |- |align="center"| > || &gt; || 大なり不等号 (greater than) |- |align="center"| " || &quot; || 引用符 (quotes) |- |align="center"| & || &amp; || アンド (ampersand) |- |align="center"| || ← || &nbsp; || 半角空白 (non-breaking space) |} <source lang="javascript"> f.push(["実体参照 &&\"<> → &&xxx;","CR",function(a){ return [ ["&","&"],["\"","""],["<","<"],[">",">"] ]}]); f.push(["実体参照 &&xxx; → \u2423><\"&&","CR",function(a){ return [ [" "," "],[">",">"],["<","<"],[""","\""],["&","&"] ]}]); </source> ==マクロ/コード 用途== ;★行頭 // を付加/削除 :行頭に // がない行には // を付加します。<br>行頭に // がある行なら // を削除します。 <source lang="javascript"> f.push(["行頭 \/\/ を付加/削除","RM",function(a){ return a.match(/^\/\/.*$/)? a.slice(2): "\/\/"+a }]); </source> ;★インデント(半角空白2個) :各行の行頭に半角空白2文字を挿入します。 <source lang="javascript"> f.push(["インデント(半角空白2個)","RM",function(a){ return " "+a }]); </source> ;編集中のファイル / 全ファイルのパスをコピー :現在編集中のファイルの絶対パスをクリップボードにコピーします。<br>新規作成ファイルなどパスがない場合は、無題 の2文字がコピーされます。 <source lang="javascript" style="overflow:auto;"> f.push(["編集中のファイルのパスをコピー","F",function(a){ var path=document.FullName; ClipboardData.SetData((path?path:"無題")); }]); f.push(["編集中の全ファイルのパスをコピー","F",function(a){ var list=[]; var docs=Editor.Documents; for(var i=0;i<docs.Count;i++){var path=docs.Item(i).FullName; list.push((path)?path:"無題");} ClipboardData.SetData(list.join("\n")); }]); </source> ;My Macros フォルダを開く :Mery の My Macros フォルダをエクスプローラで開きます。 <source lang="javascript" style="overflow:auto;"> f.push(["My Macros フォルダを開く","F",function(a){ var fso=new ActiveXObject("Scripting.FileSystemObject"); var shell=new ActiveXObject("WScript.Shell"); shell.Run('explorer "'+ fso.GetParentFolderName(Editor.FullName) +'\\My Macros"'); }]); </source> ;挿入 confirm(|) :文字列 <tt>if(!confirm())Quit();</tt> を挿入します。<br><tt>alert()</tt> と違い、[キャンセル] ボタンを押すとマクロを強制終了できるため、無限ループにハマっても安心です。<br>ちょっとしたデバッグ用途にご利用ください。 <source lang="javascript"> f.push(["挿入 confirm(|)","F",function(a){ document.Write("if(!confirm("+a.Text+"))Quit();"); a.CharLeft(false,9); }]); </source> ;選択範囲を eval で評価 :ステータスバーに eval(選択範囲) した結果を表示します。<br>たとえば、選択範囲が <span style="background:#bfdfff;">10*(5+20)</span> なら、250 と表示されます。 <source lang="javascript"> f.push(["選択範囲を eval で評価","F",function(a){ if(a.Text){Status = eval(a.Text);} }]); </source> ==検索== ;CJK漢字を検索 :CJK(中国/日本/韓国)で使用される漢字を検索し、強調表示します。 <source lang="javascript"> f.push(["CJK漢字を検索","F",function(a){ a.Find("\\p{Han}",meFindAround+meFindReplaceRegExp) }]); </source> ;検索文字列の強調をすべて解除 :「検索文字列の強調を解除」をすべての文書で実行します。ひとつひとつ解除するのが面倒な場合にご利用ください。 <source lang="javascript"> f.push(["検索文字列の強調をすべて解除","F",function(a){ var docs=Editor.Documents; for(var i=0;i<docs.Count;i++){docs.Item(i).HighlightFind = false} }]); </source> ==空白の削除== ;★空白文字を削除 :空白文字(半角空白/全角空白/水平タブ)を除去します。 <source lang="javascript"> f.push(["空白文字を削除","R",function(a){ return a.replace(/[ \t]+/g,"") }]); </source> ;★行頭行末の空白を削除 (移植) :行頭および行末にある空白文字(半角空白/全角空白/水平タブ)を除去します。 <source lang="javascript"> f.push(["行頭行末の空白を削除","RS",function(a){ return a.replace(/^[ \t]+|[ \t]+$/mg,"") }]); </source> ;★空白行を圧縮 :1行の空白行は削除し、2行以上の空白行は1行に圧縮します。<br>ネット小説など、行空けを多用しているテキストの行間を詰めることができます。 <source lang="javascript"> f.push(["空白行を圧縮","R",function(a){ return a.replace(/\n([ \t]*\n){2,}/mg,"\n\n\n").replace(/\n([ \t]*\n)/mg,"\n") }]); </source> ==各行に追加== ;★各行行頭 / 各行行末に貼り付け :クリップボードにコピーされた文字列を、各行の行頭/行末に貼り付けます。 <source lang="javascript"> f.push(["各行行頭に貼り付け","RM",function(a){ return ClipboardData.GetData()+a }]); f.push(["各行行末に貼り付け","RM",function(a){ return a+ClipboardData.GetData() }]); </source> ;★各行行頭 / 各行行末に文字列付加 (移植) :入力した文字列を、各行の行頭/行末に追加します。 <source lang="javascript" style="overflow:auto;"> f.push(["各行行頭に文字列付加","RM",(function(a){ var c=null; return function(a){ if(!c){ if(!(c=Prompt("各行行頭に付加する文字列:",""))){Quit()} } return c+a } })()]); f.push(["各行行末に文字列付加","RM",(function(a){ var c=null; return function(a){ if(!c){ if(!(c=Prompt("各行行末に付加する文字列:",""))){Quit()} } return a+c } })()]); </source> ;各行先頭 / 各行末尾に文字列付加 (矩形対応/Mery v2.1.0~) :入力した文字列を、各行の先頭/末尾に追加します。 :<span style="color:#c00;">※矩形置換するには Mery のバージョンが 2.1.0 以上である必要があります。</span> :<span style="color:#c00;">※検索文字列の強調が解除されます</span>(正確には解除でなく変更)。 <source lang="javascript" style="overflow:auto;"> f.push(["各行先頭に文字列付加","F",function(a){ var c=null; if(!c){ if(!(c=Prompt("各行先頭に付加する文字列:",""))){Quit()} a.Replace("^",c,meReplaceSelOnly+meReplaceAll+meFindReplaceRegExp); } }]); f.push(["各行末尾に文字列付加","F",function(a){ var c=null; if(!c){ if(!(c=Prompt("各行末尾に付加する文字列:",""))){Quit()} a.Replace("$",c,meReplaceSelOnly+meReplaceAll+meFindReplaceRegExp); } }]); </source> ==行の削除== ;★入力文字列を含む行 / 含まない行を削除 (移植) <source lang="javascript" style="overflow:auto;"> f.push(["入力文字列を含む行を削除","RM",(function(a){ var c=null; return function(a){ if(!c){ if(!(c=Prompt("以下の文字列を含む行を削除:",""))){Quit()} } return (a.indexOf(c)>=0)? null:a } })()]); f.push(["入力文字列を含まない行を削除","RM",(function(a){ var c=null; return function(a){ if(!c){ if(!(c=Prompt("以下の文字列を含まない行を削除:",""))){Quit()} } return (a.indexOf(c)>=0)? a:null } })()]); </source> ;★正規表現に一致する行 / 一致しない行を削除 (移植) <source lang="javascript" style="overflow:auto;"> f.push(["正規表現に一致する行を削除","RM",(function(a){ var c=null; return function(a){ if(!c){ if(!(c=Prompt("以下の正規表現に一致する行を削除:",""))){Quit()}else{c=new RegExp(c)} } return c.test(a)? null:a } })()]); f.push(["正規表現に一致しない行を削除","RM",(function(a){ var c=null; return function(a){ if(!c){ if(!(c=Prompt("以下の正規表現に一致しない行を削除:",""))){Quit()}else{c=new RegExp(c)} } return c.test(a)? a:null } })()]); </source> ;★重複行を削除 (移植) :まったく同じ内容の行が2個以上ある場合、2個目以降を削除します。 <source lang="javascript" style="overflow:auto;"> f.push(["重複行を削除","RS",function(a){ a=a.split("\n"); var b=[],map={}; for(var i=0;i<a.length;i++){ if(!map[a[i]]){map[a[i]]=true;b.push(a[i])} } return b.join("\n") }]); </source> ==行の並べ替え== ;並べ替え(Unicode 昇順 / 降順) (移植) :行をUnicode順で並べ替えます。<br>※より柔軟に並べ替えたい場合は、「[[行並べ替え]]」マクロをご利用ください。 <source lang="javascript"> f.push(["並べ替え(Unicode 昇順)","RS",function(a){ return a.split("\n").sort().join("\n") }]); f.push(["並べ替え(Unicode 降順)","RS",function(a){ return a.split("\n").sort().reverse().join("\n") }]); </source> ==数値の変換== ;★数値を3桁区切りに :選択範囲内にある半角数字列を、3桁毎にカンマで区切ります。 :例> <span style="background:#bfdfff;">12345678/9876</span> → 12,345,678/9,876 <source lang="javascript"> f.push(["数値を3桁区切りに","R",function(a){ return a.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,"); }]); </source> ;★16進数に変換 :選択範囲内にある半角数字列を、16進数値に変換します。 :例> <span style="background:#bfdfff;">291/15/44015</span> → 123/F/ABEF <source lang="javascript"> f.push(["16進数に変換","R",function(a){ return a.replace(/\d+/g, function(re){return Number(re).toString(16).toUpperCase()}) }]); </source> ;★10進数に変換 :選択範囲内にある半角英数字列を、10進数値に変換します。英字の大小、0x の有無は問いません。 :例> <span style="background:#bfdfff;">123/0x0F/abef</span> → 291/15/44015 <source lang="javascript"> f.push(["10進数に変換","R",function(a){ return a.replace(/(0x)?([0-9A-Za-z]+)/g, function(re,r1,r2){return Number("0x"+r2)}) }]); </source> ==文字種変換== ;半角に変換 / 全角に変換 :Mery の「選択範囲の変換」機能の一部を再現したものです。 <source lang="javascript"> f.push(["半角に変換","F",function(a){ a.ChangeWidth(meWidthHalfWidth) }]); f.push(["全角に変換","F",function(a){ a.ChangeWidth(meWidthFullWidth) }]); </source> ;小文字に変換 / 大文字に変換 :Mery の「選択範囲の変換」機能の一部を再現したものです。 <source lang="javascript"> f.push(["小文字に変換","F",function(a){ a.ChangeCase(meCaseLowerCase) }]); f.push(["大文字に変換","F",function(a){ a.ChangeCase(meCaseUpperCase) }]); </source> ;★半角英数⇒全角英数 / 全角英数⇒半角英数 (移植) <source lang="javascript"> f.push(["半角英数→全角英数","R",function(a){ return a.replace(/[0-9A-Za-z]/g,function(s){return String.fromCharCode(s.charCodeAt(0)+0xFEE0)}) }]); f.push(["全角英数→半角英数","R",function(a){ return a.replace(/[0-9A-Za-z]/g,function(s){return String.fromCharCode(s.charCodeAt(0)-0xFEE0)}) }]); </source> ;★全角かな⇒全角カナ / 全角カナ⇒全角かな <source lang="javascript"> f.push(["全角かな→全角カナ","R",function(a){ return a.replace(/[\u3041-\u3096]/g,function(s){return String.fromCharCode(s.charCodeAt(0)+0x60)}) }]); f.push(["全角カナ→全角かな","R",function(a){ return a.replace(/[\u30A1-\u30F6]/g,function(s){return String.fromCharCode(s.charCodeAt(0)-0x60)}) }]); </source> ;★標準変換 :マクロ「[[標準変換]]」を移植(一部改変)したものです。<br>全角英数・全角記号は半角に、半角カナは全角に変換します。 <source lang="javascript" style="overflow:auto;"> f.push(["標準変換","CR",function(a){ return [ [" "," "],["!","!"],["“","\""],["”","\""],["#","#"],["$","$"],["%","%"],["&","&"],["‘","'"],["’","'"],["(","("],[")",")"],["*","*"],["+","+"],[",",","],["-","-"],[".","."],["/","/"],["0","0"],["1","1"],["2","2"],["3","3"],["4","4"],["5","5"],["6","6"],["7","7"],["8","8"],["9","9"],[":",":"],[";",";"],["<","<"],["=","="],[">",">"],["?","?"],["@","@"],["A","A"],["B","B"],["C","C"],["D","D"],["E","E"],["F","F"],["G","G"],["H","H"],["I","I"],["J","J"],["K","K"],["L","L"],["M","M"],["N","N"],["O","O"],["P","P"],["Q","Q"],["R","R"],["S","S"],["T","T"],["U","U"],["V","V"],["W","W"],["X","X"],["Y","Y"],["Z","Z"],["[","["],["¥","\\"],["]","]"],["^","^"],["_","_"],["`","`"],["a","a"],["b","b"],["c","c"],["d","d"],["e","e"],["f","f"],["g","g"],["h","h"],["i","i"],["j","j"],["k","k"],["l","l"],["m","m"],["n","n"],["o","o"],["p","p"],["q","q"],["r","r"],["s","s"],["t","t"],["u","u"],["v","v"],["w","w"],["x","x"],["y","y"],["z","z"],["{","{"],["|","|"],["}","}"],["~","~"],["。","。"],["「","「"],["」","」"],["、","、"],["・","・"],["ヲ","ヲ"],["ァ","ァ"],["ィ","ィ"],["ゥ","ゥ"],["ェ","ェ"],["ォ","ォ"],["ャ","ャ"],["ュ","ュ"],["ョ","ョ"],["ッ","ッ"],["ー","ー"],["ア","ア"],["イ","イ"],["ヴ","ヴ"],["ウ","ウ"],["エ","エ"],["オ","オ"],["ガ","ガ"],["ギ","ギ"],["グ","グ"],["ゲ","ゲ"],["ゴ","ゴ"],["カ","カ"],["キ","キ"],["ク","ク"],["ケ","ケ"],["コ","コ"],["ザ","ザ"],["ジ","ジ"],["ズ","ズ"],["ゼ","ゼ"],["ゾ","ゾ"],["サ","サ"],["シ","シ"],["ス","ス"],["セ","セ"],["ソ","ソ"],["ダ","ダ"],["ヂ","ヂ"],["ヅ","ヅ"],["デ","デ"],["ド","ド"],["タ","タ"],["チ","チ"],["ツ","ツ"],["テ","テ"],["ト","ト"],["ナ","ナ"],["ニ","ニ"],["ヌ","ヌ"],["ネ","ネ"],["ノ","ノ"],["バ","バ"],["ビ","ビ"],["ブ","ブ"],["ベ","ベ"],["ボ","ボ"],["パ","パ"],["ピ","ピ"],["プ","プ"],["ペ","ペ"],["ポ","ポ"],["ハ","ハ"],["ヒ","ヒ"],["フ","フ"],["ヘ","ヘ"],["ホ","ホ"],["マ","マ"],["ミ","ミ"],["ム","ム"],["メ","メ"],["モ","モ"],["ヤ","ヤ"],["ユ","ユ"],["ヨ","ヨ"],["ラ","ラ"],["リ","リ"],["ル","ル"],["レ","レ"],["ロ","ロ"],["ワ","ワ"],["ン","ン"],["゙","゛"],["゚","゜"] ]}]); </source> ==符号化/復号化== ;URL %エンコード / デコード :URL アドレスに使用されるパーセントエンコーディングの符号化/復号化を行います。 <source lang="javascript"> f.push(["URL %エンコード","R",function(a){ return encodeURI(a).replace(/%0D%0A|%0D|%0A/g,"\n") }]); f.push(["URL %デコード","R",function(a){ return decodeURIComponent(a) }]); </source> ;Base64エンコード(Unicode) (移植) <source lang="javascript" style="overflow:auto;"> f.push(["Base64エンコード(Unicode)","R",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 }]); </source> ==コマンド テンプレート== 拡張コードの雛形を挿入します。<br>コマンドを自作したい場合にご利用ください。 <source lang="javascript"> f.push(["コマンド テンプレート",function(f){ f.push(["コマンド F (Function)","F",function(a){ document.Writeln('f.push(["","F",function(a){\n }]);'); a.CharLeft(false,5); }]); f.push(["コマンド R (Replace)","F",function(a){ document.Writeln('f.push(["","R",function(a){\n return }]);'); a.CharLeft(false,5); }]); f.push(["コマンド RS (Select-line)","F",function(a){ document.Writeln('f.push(["","RS",function(a){\n return }]);'); a.CharLeft(false,5); }]); f.push(["コマンド RM (Multi-line)","F",function(a){ document.Writeln('f.push(["","RM",function(a){\n return }]);'); a.CharLeft(false,5); }]); f.push(["コマンド CR (Chain)","F",function(a){ document.Writeln('f.push(["","CR",function(a){\n return [ ["",""] ]}]);'); a.CharLeft(false,12); }]); f.push(["----"]); f.push(["サブメニュー","F",function(a){ document.Writeln('f.push(["",function(f){\n'+ a.Text +'}]);'); a.CharLeft(false,5); }]); f.push(["セパレータ","F",function(a){ document.Writeln('f.push(["----"]);'); }]); }]); </source> =拡張コード:コマンド書式= 拡張コードは以下の書式に従い、記述してください。<br>※コマンドの自作・改変には、マクロや正規表現についての知識が要求されます。 ==コマンド== <source lang="javascript"> f.push(["コマンド名","モード",function(引数){ マクロ }]); </source> ;モード F (Function) :【マクロ】の記述をそのまま実行するコマンドです。 <source lang="javascript"> f.push(["コマンド名","F",function(Document.Selection){ マクロ }]); </source> ;モード R (Replace) :選択範囲を【マクロ】の処理結果で置換します。<br>※「[[テキスト変換]]」の replace 関数に相当します。 <source lang="javascript"> f.push(["コマンド名","R",function(Document.Selection.Text){return マクロ }]); </source> ;モード RS (Select-line) :選択範囲を行頭末まで拡張して【マクロ】の処理結果で置換します。<br>※「[[テキスト変換]]」の replaceS 関数に相当します。 <source lang="javascript"> f.push(["コマンド名","RS",function(Document.Selection.Text){return マクロ }]); </source> ;モード RM (Multi-line) :選択範囲を一行ごとに分割して【マクロ】の処理結果で置換します。<br>※「[[テキスト変換]]」の replaceL 関数に相当します。 <source lang="javascript"> f.push(["コマンド名","RM",function(Document.Selection.Text){return マクロ }]); </source> ;モード CR (Chain Replace) :選択範囲をリスト(配列)の内容に従い連続置換します。<br>※正規表現には対応していません。 <source lang="javascript"> f.push(["コマンド名","CR",function(){return [ ["検索","置換"] ]}]); </source> :リストは , (カンマ)区切りで増やすことができます。 <source lang="javascript"> f.push(["コマンド名","CR",function(){return [ ["検索1","置換1"],["検索2","置換2"],["検索3","置換3"] ]}]); </source> :置換は、リストの先頭から順番に実行されます。したがって、リストの記述順で結果が変わります。<br>たとえば、1234 という文字列に対し、例1 と 例2 を実行した結果は 5555 と 2345 になります。 {| |<source lang="javascript"> f.push(["例1","CR",function(){ return [ ["1","2"],["2","3"],["3","4"],["4","5"] ]}]); </source> # 1234 → 1 を 2 へ置換 → 2234 # 2234 → 2 を 3 へ置換 → 3334 # 3334 → 3 を 4 へ置換 → 4444 # 4444 → 4 を 5 へ置換 → 5555 (連続置換終了) |<source lang="javascript"> f.push(["例2","CR",function(){ return [ ["4","5"],["3","4"],["2","3"],["1","2"] ]}]); </source> # 1234 → 4 を 5 へ置換 → 1235 # 1235 → 3 を 4 へ置換 → 1245 # 1245 → 2 を 3 へ置換 → 1345 # 1345 → 1 を 2 へ置換 → 2345 (連続置換終了) |} ==サブメニュー== サブメニューを設けます。コマンドをグループやカテゴリに分類したり、使用頻度の低いコマンドをまとめて仮置いたりできます。<br>サブメニュー内にサブメニューを作ること(階層化)も可能です。階層の数に制限はありません。 <source lang="javascript"> f.push(["メニュー名",function(f){ 【コマンド or サブメニュー or セパレータ】 }]); </source> ==セパレータ== メニューに区切り(セパレータ)を設けます。 <source lang="javascript"> f.push(["----"]); </source> 半角ハイフン - の数は何個でもかまいません。<br>ただし、半角ハイフン以外の文字を含めてはいけません。 <source lang="javascript"> f.push(["-"]); //← OK (1個) f.push(["----------"]); //← OK (10個) f.push(["--区切り--"]); //← NG </source>
編集内容の要約:
MeryWikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MeryWiki:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の数式を計算してその答えを欄に入力してください (
ヘルプ
):
いちたすには =
キャンセル
編集ヘルプ
(新しいウィンドウで開きます)
スポンサーリンク
ナビゲーション メニュー
個人用ツール
ログインしていません
トーク
投稿記録
アカウント作成
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
編集
履歴表示
その他
検索
スポンサーリンク
スポンサーリンク
案内
メインページ
ヘルプ
よくある質問
マクロリファレンス
マクロライブラリ
プラグインライブラリ
構文ファイル
テーマ
寄付・開発支援
練習用ページ
開発室
開発者のブログ
ツール
スポンサーリンク