「
利用者:Masme
」を編集中 (節単位)
ナビゲーションに移動
検索に移動
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、さまざまなメリットもあります。
スパム攻撃防止用のチェックです。 決して、ここには、値の入力は
しない
でください!
=マクロ「テキスト整形」の仕様変更について (2019/05/01)= マクロ「テキスト整形」の処理の流れを「前処理」「本処理」「後処理」の3段階に分けて考えたとき、モード (F/R/RS) 別に異なっていた流れを統合し、モードを廃止しようと考えています。 {|class="wikitable" !colspan="4"| 旧仕様 |- ! モード !! 前処理 !! 本処理 !! 後処理 |- ! F | なし | 引数に Selection を渡して処理 | なし |- ! R | なし |rowspan="2"| 引数に Selection.Text を渡して処理 |rowspan="2"| 戻り値で選択範囲を置換、再選択 |- ! RS | 選択範囲を行全体に拡張 |- !colspan="4"| 新仕様 |- | | オプションで指定 | 第1引数に Selection.Text を、<br>第2引数に Selection を渡して処理 | 戻り値で置換・再選択を制御 |} ==後処理:戻り値による選択範囲の置換・再選択の制御== Mery 2.7.0 にて「マクロで Chakra (jscript9.dll) における [[マクロリファレンス:Window_インターフェイス#Quit_メソッド|Quit メソッド]]をサポート外にした」([https://www.haijin-boys.com/software/mery/mery-2-7-0 公式記事])ことを受け、戻り値により後処理(選択範囲の置換・再選択)を制御できる仕組みを導入します。 String (文字列) か Array (配列) を return すると、選択範囲を置換してカーソルを移動します。それ以外 (undefined など) の場合は、選択範囲に対し何もしません。<br> <code>Quit();</code> (処理を中断) の代替策として <code>return;</code> (undefined を返す) などとすることで処理を終了させることができます。 <syntaxhighlight lang="javascript"> f.push(["例1","",function(){ return "abcd" }]); f.push(["例2","",function(){ return ["ab","cd"] }]); f.push(["例3","",function(){ return ["ab","cd",""] }]); f.push(["例4","",function(){ return; }]); </syntaxhighlight> {|class="wikitable" ! 例 !! 動作 |- | <code>"abcd"</code> || abcd に置換後、abcd を選択 = <code>["","abcd",""]</code> |- | <code>["ab","cd"]</code> || abcd に置換後、ab と cd の間に移動 |- | <code>["ab","cd",""]</code> || abcd に置換後、cd を選択 |- | String / Array 以外 || 選択範囲に対し何もしない |} ==本処理:第2引数を復活== マクロ「[[テキスト変換]]」の第2引数を復活し、第1引数に Document.Selection.Text を、第2引数に Document.Selection を渡すようにします。 「テキスト整形」で第2引数を削除したのは、「テキスト変換」で Selection を利用したコマンドが無かったこと、戻り値で選択範囲が置換されるため Selection を利用しづらいと感じたことが理由でした。 「テキスト整形」でモード F を設け分離したのも、そうした理由によりますが、戻り値で選択範囲を置換するかしないか制御できるようになったため状況が変わりました。 ==前処理:モードを廃止、オプションに変更== 「モード」を「オプション」に変更し、機能を追加します。 {|class="wikitable" | <code>s</code> || 実行に範囲選択を要求 (require selection)<br>非選択時はメニュー項目がグレーになり実行不可 |- | <code>c</code> || 実行にクリップボードを要求 (require clipboard)<br>貼り付けが行えない状況では同上 |- | <code>L</code> || 行選択してから処理 (select Line)<br>モード RS はオプション L に変更 |- | <code>O</code> || 非選択時はすべて選択してから処理 (select OR all)<br>※実験的機能(変更・廃止の可能性あり) |} * 複数指定する場合、空白で区切ります。順序は問いません。 * モードは必須でしたが、オプションは任意です。 * 上記以外の文字(オプション)を指定してもエラーにはなりません。<br>モード F/R/RS はオプション F/R/RS と認識されるが効果は無い、ということになります。 ==旧仕様から新仕様への移行方法== 移行を補助するコマンドを用意しました。 ※新仕様の基本コード用。旧仕様で使用する場合は、オプション "L" をモード "RS" に書き換えてください。 <pre> 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+')'}) }]); </pre> 旧仕様のコマンドに対し、上記のコマンドを実行すると、以下のように置換され、新仕様の基本コードで問題なく動作するようになります。 ;モード F <p style="background:#f9f9f9; border:1px dashed #999; padding:6px;"><samp>f.push(["コマンド名","<span style="background:#fcc;">F</span>",function(a) 以下略</samp></p> :↓ <p style="background:#f9f9f9; border:1px dashed #999; padding:6px;"><samp>f.push(["コマンド名","",function(<span style="background:#fcc;">_,</span>a) 以下略</samp></p> ;モード R <p style="background:#f9f9f9; border:1px dashed #999; padding:6px;"><samp>f.push(["コマンド名","<span style="background:#fcc;">R</span>",function(a) 以下略</samp></p> :↓ <p style="background:#f9f9f9; border:1px dashed #999; padding:6px;"><samp>f.push(["コマンド名","",function(a) 以下略</samp></p> ;モード RS <p style="background:#f9f9f9; border:1px dashed #999; padding:6px;"><samp>f.push(["コマンド名","<span style="background:#fcc;">RS</span>",function(a) 以下略</samp></p> :↓ <p style="background:#f9f9f9; border:1px dashed #999; padding:6px;"><samp>f.push(["コマンド名","<span style="background:#fcc;">L</span>",function(a) 以下略</samp></p> ==変更点まとめ== {|class="wikitable" ! 機能 !! 旧仕様 !! 新仕様 !! 備考 |- ! モード F |style="background:#cfc;"| 利用可 ||style="background:#fc6;"| 動作不良 | 引数を利用しているものは動作しなくなります |- ! モード R |style="background:#cfc;"| 利用可 ||style="background:#fc6;"| 動作可 | 動作しますが、モード名の R は不要です(削除推奨) |- ! モード RS |style="background:#cfc;"| 利用可 ||style="background:#fc6;"| 動作不良 | 動作しますが、行選択はされなくなります |- ! 戻り値制御 |style="background:#fc6;"| 動作不良 ||style="background:#cfc;"| 利用可 | 旧仕様では文字列以外に非対応、モード F では利用不可 |- ! 第2引数 |style="background:#fcc;"| 利用不可 ||style="background:#cfc;"| 利用可 | モード F は第2引数利用に移行 |- ! オプション |style="background:#fcc;"| 利用不可 ||style="background:#cfc;"| 利用可 | モード RS はオプション L に移行 |} ==記事ソースから拡張コードを抽出== 「テキスト整形」の記事ソースから拡張コードを抽出するコマンドを用意しました。 ※新仕様の基本コード用。文書全体を対象に置換が行われます。 <pre> 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> <b>使用手順</b> # 「[[テキスト整形]]」の記事上部にある [編集] タブをクリックする。<br>または、記事の「[[テキスト整形#拡張コード|拡張コード]]」見出しの [編集] リンクをクリックする。 # 記事編集ページに移動するので、テキストボックス内の文章をすべて選択し、コピーする。<br>※テキストボックス内を右クリックしてメニューから実行するのが一番わかりやすいと思われます。 #* コピーした後は戻る(ブラウザバック)か閉じるかして記事編集ページから離れてください。 # Mery で文書を新規作成し、コピーした文章を貼り付ける。 # 「テキスト整形」マクロを起動し、「記事ソースから拡張コードを抽出」コマンドを実行する。
編集内容の要約:
MeryWikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MeryWiki:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の数式を計算してその答えを欄に入力してください (
ヘルプ
):
いちたすには =
キャンセル
編集ヘルプ
(新しいウィンドウで開きます)
スポンサーリンク
ナビゲーション メニュー
個人用ツール
ログインしていません
トーク
投稿記録
アカウント作成
ログイン
名前空間
利用者ページ
議論
日本語
表示
閲覧
編集
履歴表示
その他
検索
スポンサーリンク
スポンサーリンク
案内
メインページ
ヘルプ
よくある質問
マクロリファレンス
マクロライブラリ
プラグインライブラリ
構文ファイル
テーマ
寄付・開発支援
練習用ページ
開発室
開発者のブログ
ツール
スポンサーリンク