マクロ「テキスト整形」の仕様変更について |
非推奨のタグを修正 |
||
| (他の1人の利用者による、間の2版が非表示) | |||
| 34行目: | 34行目: | ||
<code>Quit();</code> (処理を中断) の代替策として <code>return;</code> (undefined を返す) などとすることで処理を終了させることができます。 | <code>Quit();</code> (処理を中断) の代替策として <code>return;</code> (undefined を返す) などとすることで処理を終了させることができます。 | ||
< | <syntaxhighlight lang="javascript"> | ||
f.push(["例1","",function(){ | f.push(["例1","",function(){ | ||
return "abcd" }]); | return "abcd" }]); | ||
| 43行目: | 43行目: | ||
f.push(["例4","",function(){ | f.push(["例4","",function(){ | ||
return; }]); | return; }]); | ||
</ | </syntaxhighlight> | ||
{|class="wikitable" | {|class="wikitable" | ||
! 例 !! 動作 | ! 例 !! 動作 | ||
| 81行目: | 81行目: | ||
移行を補助するコマンドを用意しました。 | 移行を補助するコマンドを用意しました。 | ||
※新仕様の基本コード用。旧仕様で使用する場合は、オプション "L" をモード "RS" に書き換えてください。 | |||
<pre | <pre> | ||
f.push(["拡張コードを旧→新仕様に変換"," | f.push(["拡張コードを旧→新仕様に変換","L",function(_){ //2019/06/01 | ||
return _.replace(/^(\s*(?:\/\/[\/\s]*)?)f\.push\(\[("[^\\"]*(?:\\.[^\\"]*)*"|'[^\\']*(?:\\.[^\\']*)*'),"(RS?|F)",function\(([$0-9A-Za-z_]*)\)/gm,function(_,cmnt,name,mode,arg){return cmnt+'f.push(['+name+',"'+(mode==="RS"?"L":"")+'",function('+(mode==="F"&&arg?"_,":"")+arg+')'}) }]); | return _.replace(/^(\s*(?:\/\/[\/\s]*)?)f\.push\(\[("[^\\"]*(?:\\.[^\\"]*)*"|'[^\\']*(?:\\.[^\\']*)*'),"(RS?|F)",function\(([$0-9A-Za-z_]*)\)/gm,function(_,cmnt,name,mode,arg){return cmnt+'f.push(['+name+',"'+(mode==="RS"?"L":"")+'",function('+(mode==="F"&&arg?"_,":"")+arg+')'}) }]); | ||
</pre> | </pre> | ||
| 128行目: | 128行目: | ||
| モード RS はオプション L に移行 | | モード RS はオプション L に移行 | ||
|} | |} | ||
==記事ソースから拡張コードを抽出== | ==記事ソースから拡張コードを抽出== | ||
「テキスト整形」の記事ソースから拡張コードを抽出するコマンドを用意しました。 | 「テキスト整形」の記事ソースから拡張コードを抽出するコマンドを用意しました。 | ||
※新仕様の基本コード用。文書全体を対象に置換が行われます。 | |||
<pre | <pre> | ||
f.push(["記事ソースから拡張コードを抽出"," | f.push(["記事ソースから拡張コードを抽出","",function(_,$){ //2019/12/21 | ||
$.SelectAll(); var src=$.Text.match(/(?:^|\n)=拡張コード=\n[\s\S]*?(\n==[\s\S]*?)(?:\n=拡張コード:書式=\n|$)/); if(src)$.Text=src[1].replace(/\n==([^=]+)==\n([\s\S]*?)(?=\n==[^=]|$)/g,function(_,ctg,src){var cmd=[], res, re=new RegExp(/^<pre(?: [^>]*)?>\s*(f\.push\(\[[\s\S]*?\]\);)\s*<\/pre>/gm); while(res=re.exec(src)){cmd.push(res[1].replace(/&amp;/g,"&"))} return 'f.push(["'+ctg+'",function(f){\n\n'+ cmd.join("\n\n") +'\n\n}]);\n\n'}).slice(0,-1) }]); | |||
</pre> | </pre> | ||
<b>使用手順</b> | <b>使用手順</b> | ||
| 304行目: | 162行目: | ||
* モード RS で実現可能=代替可能であり、RM ならではの利点が無い。 | * モード RS で実現可能=代替可能であり、RM ならではの利点が無い。 | ||
* モード R/RS に比べ処理が異質で、コマンドを作る際はそれを考慮しなければならない。<br>※異質=R/RS が「選択範囲の文字列」を対象に処理を行うのに対し、RM は「選択範囲の各行の文字列」を対象に処理を行う。 | * モード R/RS に比べ処理が異質で、コマンドを作る際はそれを考慮しなければならない。<br>※異質=R/RS が「選択範囲の文字列」を対象に処理を行うのに対し、RM は「選択範囲の各行の文字列」を対象に処理を行う。 | ||
< | <syntaxhighlight lang="javascript"> | ||
//※モード RM では「クロージャ」という仕組みを使用する必要があり難解 | //※モード RM では「クロージャ」という仕組みを使用する必要があり難解 | ||
f.push(["各行行頭に文字列付加...","RM",(function(a){ | f.push(["各行行頭に文字列付加...","RM",(function(a){ | ||
| 311行目: | 169行目: | ||
f.push(["各行行頭に文字列付加...","RS",function(a){ | f.push(["各行行頭に文字列付加...","RS",function(a){ | ||
var p=Prompt("各行行頭に付加する文字列:",""); if(!p)Quit(); return a.replace(/^/gm,p) }]); | var p=Prompt("各行行頭に付加する文字列:",""); if(!p)Quit(); return a.replace(/^/gm,p) }]); | ||
</ | </syntaxhighlight> | ||
< | <syntaxhighlight lang="javascript"> | ||
//※モード RM でも、 | //※モード RM でも、 | ||
f.push(["空白行を削除","RM",function(a){ | f.push(["空白行を削除","RM",function(a){ | ||
| 319行目: | 177行目: | ||
f.push(["空白行を削除","RS",function(a){ | f.push(["空白行を削除","RS",function(a){ | ||
return a.replace(/^[ \t]*$\n?/gm,"") }]); | return a.replace(/^[ \t]*$\n?/gm,"") }]); | ||
</ | </syntaxhighlight> | ||
< | <syntaxhighlight lang="javascript"> | ||
//※モード RM なら正規表現に頼らず簡素に記述できるコマンドもあるが、 | //※モード RM なら正規表現に頼らず簡素に記述できるコマンドもあるが、 | ||
f.push(["インデント(半角空白2個)","RM",function(a){ | f.push(["インデント(半角空白2個)","RM",function(a){ | ||
| 331行目: | 189行目: | ||
f.push(["行頭 \/\/ を付加/削除","RS",function(a){ | f.push(["行頭 \/\/ を付加/削除","RS",function(a){ | ||
return a.replace(/^(\/\/)?/gm,function(s){return s? "": "\/\/"}) }]); | return a.replace(/^(\/\/)?/gm,function(s){return s? "": "\/\/"}) }]); | ||
</ | </syntaxhighlight> | ||
==モード CR を廃止、replaceBatch メソッドを追加== | ==モード CR を廃止、replaceBatch メソッドを追加== | ||
モード CR (連続置換) は、<code>replace</code> を連鎖させる記法(メソッドチェーン)をより簡素に記述するために設けられた機能です。 | モード CR (連続置換) は、<code>replace</code> を連鎖させる記法(メソッドチェーン)をより簡素に記述するために設けられた機能です。 | ||
< | <syntaxhighlight lang="javascript"> | ||
f.push(["コマンド名","R",function(a){ | f.push(["コマンド名","R",function(a){ | ||
return a.replace(/ABC/g,"DEF").replace(/\(1\)/g,"①").replace(/GHI/gi,"JKL") }]); | return a.replace(/ABC/g,"DEF").replace(/\(1\)/g,"①").replace(/GHI/gi,"JKL") }]); | ||
| 341行目: | 199行目: | ||
f.push(["コマンド名","CR",function(a){ | f.push(["コマンド名","CR",function(a){ | ||
return [ ["ABC","DEF"],["(1)","①"],[/GHI/gi,"JKL"] ]}]); | return [ ["ABC","DEF"],["(1)","①"],[/GHI/gi,"JKL"] ]}]); | ||
</ | </syntaxhighlight> | ||
しかし、モードの一種としたがゆえに、他のモードでは利用できない事、<code>replace</code> のような使い方ができない事が難点としてありました。<br> | しかし、モードの一種としたがゆえに、他のモードでは利用できない事、<code>replace</code> のような使い方ができない事が難点としてありました。<br> | ||
<code>replaceBatch</code> メソッドは、この難点を解消するために設けられる機能です。 | <code>replaceBatch</code> メソッドは、この難点を解消するために設けられる機能です。 | ||
< | <syntaxhighlight lang="javascript"> | ||
//※モード R で利用する(基本形) | //※モード R で利用する(基本形) | ||
f.push(["コマンド名","R",function(a){ | f.push(["コマンド名","R",function(a){ | ||
| 354行目: | 212行目: | ||
f.push(["コマンド名","F",function(a){ | f.push(["コマンド名","F",function(a){ | ||
a.Text = a.Text.replaceBatch([ ["ABC","DEF"],["(1)","①"],[/GHI/gi,"JKL"] ]) }]); | a.Text = a.Text.replaceBatch([ ["ABC","DEF"],["(1)","①"],[/GHI/gi,"JKL"] ]) }]); | ||
</ | </syntaxhighlight> | ||
< | <syntaxhighlight lang="javascript"> | ||
//※replace のようにメソッドチェーンが可能 | //※replace のようにメソッドチェーンが可能 | ||
f.push(["コマンド名","R",function(a){ | f.push(["コマンド名","R",function(a){ | ||
return a.replace(省略).replaceBatch([ 省略 ]).replace(省略) }]); | return a.replace(省略).replaceBatch([ 省略 ]).replace(省略) }]); | ||
</ | </syntaxhighlight> | ||
===モード CR → R (replaceBatch) への移行方法=== | ===モード CR → R (replaceBatch) への移行方法=== | ||
スポンサーリンク