「
利用者:Masme
」を編集中 (節単位)
ナビゲーションに移動
検索に移動
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、さまざまなメリットもあります。
スパム攻撃防止用のチェックです。 決して、ここには、値の入力は
しない
でください!
=マクロ「テキスト整形」の仕様変更について (2015/02/14)= ==モード R/RS 実行後、処理した範囲を選択し直すように== <p style="background:#f9f9f9; border:1px dashed #999; padding:6px;">旧仕様では、コマンド実行後は<span style="background:#bfdfff; border-right:2px solid;">範囲選択が 解 除 されました。↵<br>新仕様では、コマンド実行前に選択範囲を 記 憶 し、実行後に 復 元 します。↵<br>処理の結果、字数が 増 減 した場合は、選択範囲が 調 整 </span>されます。↵</p> :↓ コマンド「空白文字を除去」実行 <p style="background:#f9f9f9; border:1px dashed #999; padding:6px;">旧仕様では、コマンド実行後は<span style="background:#bfdfff; border-right:2px solid;">範囲選択が解除されました。↵<br>新仕様では、コマンド実行前に選択範囲を記憶し、実行後に復元します。↵<br>処理の結果、字数が増減した場合は、選択範囲が調整</span>されます。↵</p> この変更により、コマンドの効果範囲が目視できるようになり、また、選択し直す手間なく別の処理に移ることができるようになります。 * モード R では、選択範囲の始点終点の位置関係が維持されます。 * モード RS では、選択範囲を行頭行末まで拡張した状態が記憶されます。始点は上端行頭、終点は下端行末となります。 * コマンド実行中にカーソル位置を移動させる処理がある場合には対応できません。 ==モード RM を廃止== モード RM (一行ごとに処理) は、マクロ「[[テキスト変換]]」の関数タイプ replaceL に相当し、モード RS で実現可能な処理をより簡素に記述するために設けられた機能です。<br> しかし、以下のような難点が見受けられることから、廃止を考えるに至りました。 * モード RS より簡素に記述できるとは必ずしも限らない。 * モード RS で実現可能=代替可能であり、RM ならではの利点が無い。 * モード R/RS に比べ処理が異質で、コマンドを作る際はそれを考慮しなければならない。<br>※異質=R/RS が「選択範囲の文字列」を対象に処理を行うのに対し、RM は「選択範囲の各行の文字列」を対象に処理を行う。 <syntaxhighlight lang="javascript"> //※モード RM では「クロージャ」という仕組みを使用する必要があり難解 f.push(["各行行頭に文字列付加...","RM",(function(a){ var p=null; return function(a){ if(!p){ if(!(p=Prompt("各行行頭に付加する文字列:",""))){Quit()} } return p+a } })()]); //※モード RS で replace(正規表現) を使用するほうが簡素に記述できる f.push(["各行行頭に文字列付加...","RS",function(a){ var p=Prompt("各行行頭に付加する文字列:",""); if(!p)Quit(); return a.replace(/^/gm,p) }]); </syntaxhighlight> <syntaxhighlight lang="javascript"> //※モード RM でも、 f.push(["空白行を削除","RM",function(a){ return a.match(/^[ \t]*$/)? null:a }]); //※モード RS でも、必要な知識や字数がほぼ変わらない時がある f.push(["空白行を削除","RS",function(a){ return a.replace(/^[ \t]*$\n?/gm,"") }]); </syntaxhighlight> <syntaxhighlight lang="javascript"> //※モード RM なら正規表現に頼らず簡素に記述できるコマンドもあるが、 f.push(["インデント(半角空白2個)","RM",function(a){ return " "+a }]); f.push(["インデント(半角空白2個)","RS",function(a){ return a.replace(/^/gm," ") }]); //※正規表現を利用したコマンドも数多くあり、利点になりづらい f.push(["行頭 \/\/ を付加/削除","RM",function(a){ return a.match(/^\/\/.*$/)? a.slice(2): "\/\/"+a }]); f.push(["行頭 \/\/ を付加/削除","RS",function(a){ return a.replace(/^(\/\/)?/gm,function(s){return s? "": "\/\/"}) }]); </syntaxhighlight> ==モード CR を廃止、replaceBatch メソッドを追加== モード CR (連続置換) は、<code>replace</code> を連鎖させる記法(メソッドチェーン)をより簡素に記述するために設けられた機能です。 <syntaxhighlight lang="javascript"> f.push(["コマンド名","R",function(a){ return a.replace(/ABC/g,"DEF").replace(/\(1\)/g,"①").replace(/GHI/gi,"JKL") }]); //↓簡素化 f.push(["コマンド名","CR",function(a){ return [ ["ABC","DEF"],["(1)","①"],[/GHI/gi,"JKL"] ]}]); </syntaxhighlight> しかし、モードの一種としたがゆえに、他のモードでは利用できない事、<code>replace</code> のような使い方ができない事が難点としてありました。<br> <code>replaceBatch</code> メソッドは、この難点を解消するために設けられる機能です。 <syntaxhighlight lang="javascript"> //※モード R で利用する(基本形) f.push(["コマンド名","R",function(a){ return a.replaceBatch([ ["ABC","DEF"],["(1)","①"],[/GHI/gi,"JKL"] ]) }]); //※モード RS で利用する(選択範囲を拡張) f.push(["コマンド名","RS",function(a){ return a.replaceBatch([ ["ABC","DEF"],["(1)","①"],[/GHI/gi,"JKL"] ]) }]); //※モード F で利用する(▲非推奨) f.push(["コマンド名","F",function(a){ a.Text = a.Text.replaceBatch([ ["ABC","DEF"],["(1)","①"],[/GHI/gi,"JKL"] ]) }]); </syntaxhighlight> <syntaxhighlight lang="javascript"> //※replace のようにメソッドチェーンが可能 f.push(["コマンド名","R",function(a){ return a.replace(省略).replaceBatch([ 省略 ]).replace(省略) }]); </syntaxhighlight> ===モード CR → R (replaceBatch) への移行方法=== 以下のように書き換えることで移行が可能です。 <p style="background:#f9f9f9; border:1px dashed #999; padding:6px;"><samp>f.push(["コマンド名","<span style="background:#fcc;">CR</span>",function(a){<br> return <span style="background:#fcc;">[</span> [検索1,置換1],[検索2,置換2] 中略 <span style="background:#fcc;">]</span>}]);</samp></p> :↓ <p style="background:#f9f9f9; border:1px dashed #999; padding:6px;"><samp>f.push(["コマンド名","<span style="background:#fcc;">R</span>",function(a){<br> return <span style="background:#fcc;">a.replaceBatch([</span> [検索1,置換1],[検索2,置換2] 中略 <span style="background:#fcc;">]) </span>}]);</samp></p> ==変更点まとめ== {|class="wikitable" ! 機能 !! 旧仕様 !! 新仕様 !! 備考 |- ! モード F |style="background:#cfc;"| 利用可 ||style="background:#cfc;"| 利用可 | 変更なし |- ! モード R |style="background:#cfc;"| 利用可 ||style="background:#cfc;"| 利用可 | 選択範囲を維持・調整するように |- ! モード RS |style="background:#cfc;"| 利用可 ||style="background:#cfc;"| 利用可 | 選択範囲を維持・調整するように |- ! モード RM |style="background:#cfc;"| 利用可 ||style="background:#fcc;"| 廃止 | モード RS で作り直し |- ! モード CR |style="background:#cfc;"| 利用可 ||style="background:#fcc;"| 廃止 | replaceBatch メソッドに移行 |- ! replaceBatch |style="background:#fcc;"| エラー ||style="background:#cfc;"| 利用可 | 旧仕様ではコマンド実行時にエラーが発生する |}
編集内容の要約:
MeryWikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MeryWiki:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の数式を計算してその答えを欄に入力してください (
ヘルプ
):
いちたすには =
キャンセル
編集ヘルプ
(新しいウィンドウで開きます)
スポンサーリンク
ナビゲーション メニュー
個人用ツール
ログインしていません
トーク
投稿記録
アカウント作成
ログイン
名前空間
利用者ページ
議論
日本語
表示
閲覧
編集
履歴表示
その他
検索
スポンサーリンク
スポンサーリンク
案内
メインページ
ヘルプ
よくある質問
マクロリファレンス
マクロライブラリ
プラグインライブラリ
構文ファイル
テーマ
寄付・開発支援
練習用ページ
開発室
開発者のブログ
ツール
スポンサーリンク