Masme (トーク | 投稿記録)
「テキスト整形」正式版公開に伴い先行版削除
MSY-07 (トーク | 投稿記録)
非推奨のタグを修正
 
(他の1人の利用者による、間の1版が非表示)
34行目: 34行目:
<code>Quit();</code> (処理を中断) の代替策として <code>return;</code> (undefined を返す) などとすることで処理を終了させることができます。
<code>Quit();</code> (処理を中断) の代替策として <code>return;</code> (undefined を返す) などとすることで処理を終了させることができます。


<source lang="javascript">
<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; }]);
</source>
</syntaxhighlight>
{|class="wikitable"
{|class="wikitable"
! 例 !! 動作
! 例 !! 動作
82行目: 82行目:


※新仕様の基本コード用。旧仕様で使用する場合は、オプション "L" をモード "RS" に書き換えてください。
※新仕様の基本コード用。旧仕様で使用する場合は、オプション "L" をモード "RS" に書き換えてください。
<pre style="word-wrap:break-word;">
<pre>
f.push(["拡張コードを旧→新仕様に変換","L",function(_){ //2019/06/01
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+')'}) }]);
133行目: 133行目:


※新仕様の基本コード用。文書全体を対象に置換が行われます。
※新仕様の基本コード用。文書全体を対象に置換が行われます。
<pre style="word-wrap:break-word;">
<pre>
f.push(["記事ソースから拡張コードを抽出","",function(_,$){ //2019/06/01
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])} return 'f.push(["'+ctg+'",function(f){\n\n'+ cmd.join("\n\n") +'\n\n}]);\n\n'}).slice(0,-1) }]);
   $.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;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>
162行目: 162行目:
* モード RS で実現可能=代替可能であり、RM ならではの利点が無い。
* モード RS で実現可能=代替可能であり、RM ならではの利点が無い。
* モード R/RS に比べ処理が異質で、コマンドを作る際はそれを考慮しなければならない。<br>※異質=R/RS が「選択範囲の文字列」を対象に処理を行うのに対し、RM は「選択範囲の各行の文字列」を対象に処理を行う。
* モード R/RS に比べ処理が異質で、コマンドを作る際はそれを考慮しなければならない。<br>※異質=R/RS が「選択範囲の文字列」を対象に処理を行うのに対し、RM は「選択範囲の各行の文字列」を対象に処理を行う。
<source lang="javascript" style="word-wrap:break-word;">
<syntaxhighlight lang="javascript">
//※モード RM では「クロージャ」という仕組みを使用する必要があり難解
//※モード RM では「クロージャ」という仕組みを使用する必要があり難解
f.push(["各行行頭に文字列付加...","RM",(function(a){
f.push(["各行行頭に文字列付加...","RM",(function(a){
169行目: 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) }]);
</source>
</syntaxhighlight>
<source lang="javascript" style="word-wrap:break-word;">
<syntaxhighlight lang="javascript">
//※モード RM でも、
//※モード RM でも、
f.push(["空白行を削除","RM",function(a){
f.push(["空白行を削除","RM",function(a){
177行目: 177行目:
f.push(["空白行を削除","RS",function(a){
f.push(["空白行を削除","RS",function(a){
   return a.replace(/^[  \t]*$\n?/gm,"") }]);
   return a.replace(/^[  \t]*$\n?/gm,"") }]);
</source>
</syntaxhighlight>
<source lang="javascript" style="word-wrap:break-word;">
<syntaxhighlight lang="javascript">
//※モード RM なら正規表現に頼らず簡素に記述できるコマンドもあるが、
//※モード RM なら正規表現に頼らず簡素に記述できるコマンドもあるが、
f.push(["インデント(半角空白2個)","RM",function(a){
f.push(["インデント(半角空白2個)","RM",function(a){
189行目: 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? "": "\/\/"}) }]);
</source>
</syntaxhighlight>


==モード CR を廃止、replaceBatch メソッドを追加==
==モード CR を廃止、replaceBatch メソッドを追加==
モード CR (連続置換) は、<code>replace</code> を連鎖させる記法(メソッドチェーン)をより簡素に記述するために設けられた機能です。
モード CR (連続置換) は、<code>replace</code> を連鎖させる記法(メソッドチェーン)をより簡素に記述するために設けられた機能です。
<source lang="javascript">
<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") }]);
199行目: 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"] ]}]);
</source>
</syntaxhighlight>
しかし、モードの一種としたがゆえに、他のモードでは利用できない事、<code>replace</code> のような使い方ができない事が難点としてありました。<br>
しかし、モードの一種としたがゆえに、他のモードでは利用できない事、<code>replace</code> のような使い方ができない事が難点としてありました。<br>
<code>replaceBatch</code> メソッドは、この難点を解消するために設けられる機能です。
<code>replaceBatch</code> メソッドは、この難点を解消するために設けられる機能です。
<source lang="javascript">
<syntaxhighlight lang="javascript">
//※モード R で利用する(基本形)
//※モード R で利用する(基本形)
f.push(["コマンド名","R",function(a){
f.push(["コマンド名","R",function(a){
212行目: 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"] ]) }]);
</source>
</syntaxhighlight>
<source lang="javascript">
<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(省略) }]);
</source>
</syntaxhighlight>


===モード CR → R (replaceBatch) への移行方法===
===モード CR → R (replaceBatch) への移行方法===
スポンサーリンク