「
カッコで囲う
」を編集中 (節単位)
ナビゲーションに移動
検索に移動
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、さまざまなメリットもあります。
スパム攻撃防止用のチェックです。 決して、ここには、値の入力は
しない
でください!
== カッコで囲う (ポップアップメニューなし) == (最終更新 2020-06-23) 簡易版です。 : ''c.f.'' 追加と削除ができる機能強化版 → 「[[#引用符を追加/削除|引用符を追加/削除]]」 特定の種類のカッコを一発で追加する小マクロは[[キーアサイン集#括弧で挟む|キーアサイン集]]にもありますが、コードを改変して前後に付ける "カッコ" のかわりに "任意の文字列" を指定するばあいに「折り返し」表示と相性のよくない部分があります。 また、マクロ実行後のカーソル位置を'''選択範囲なし'''のときと'''選択範囲あり'''のときとで変えたいばあいも、こちらのコードがよいでしょう。 <syntaxhighlight lang="javascript" style="height:80em; overflow:auto;"> #title = "( カッコ )" #tooltip = "( カッコ ) で囲う" #icon = "brackets(parenthesis).ico" // #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",101 /** * ----------------------------------------------------------------------------- * カッコで囲う * sukemaru (Last modified: 2020-06-23) * ----------------------------------------------------------------------------- * MeryWiki の マクロライブラリ >> キーアサイン集 の「括弧で挟む」を改変 * 選択範囲の前後に任意の文字列(複数文字)を追加するマクロとして利用できます * * マルチカーソル/複数選択範囲に対応 */ // ---------- ▼ 設定項目 ▼ ---------- // var pre = "("; // 前に付ける文字列(開きカッコ) var sur = ")"; // 後ろに付ける文字列(閉じカッコ) // ---------- ▲ 設定項目 ▲ ---------- // var s = editor.ActiveDocument.selection; var sx = ScrollX, sy = ScrollY; // マルチカーソル対応 var arg = [ pre, sur ]; // 選択範囲が1つで矩形選択ではないとき if ( ! s.Mode || s.Mode === meModeStream ) { Brackets_Main( arg ); } // 複数行または複数選択のとき else { BeginUndoGroup(); AddUndo(); MultiFunction( Brackets_Main, arg ); EndUndoGroup(); } ScrollX = sx; ScrollY = sy; function Brackets_Main( arg ) { var pre = arg[0]; var sur = arg[1]; // 選択範囲の各座標を取得 var s = editor.ActiveDocument.selection; var tx = s.GetTopPointX( mePosLogical ); var ty = s.GetTopPointY( mePosLogical ); // 選択範囲のテキストを取得し、カッコを追加 var st = s.Text; s.Text = pre + st + sur; // カーソルを移動、または範囲選択 if ( ! st ) { // 選択範囲なしだったばあい、カッコのあいだにカーソルを移動 s.SetActivePos( s.GetActivePos() - sur.length ); } else { // 選択範囲があったばあい、カッコを含めて範囲選択 s.SetAnchorPoint( mePosLogical, tx, ty ); } } /** * 関数 MultiFunction( Fn, arg1 ) * マルチカーソル(複数選択範囲)に対応させる * 第1引数: Function; 選択範囲ごとに適用する処理の関数 * 第2引数以降: Function に渡す引数をまとめた配列 */ function MultiFunction( Fn, arg ) { var d = editor.ActiveDocument; var s = d.selection; // 矩形選択範囲は行に分ける s.Mode = meModeMulti; // 選択範囲の座標を取得 var sCount = s.Count; var Sel = []; for ( var i = 0; i < sCount; i ++ ) { Sel[i] = { act: s.GetActivePos( i ), anc: s.GetAnchorPos( i ) }; } // 各選択範囲を処理; for ( var i = 0, diff = 0, dl; i < sCount; i ++ ) { dl = d.TextLength; s.SetActivePos( Sel[i].act + diff ); s.SetAnchorPos( Sel[i].anc + diff ); Fn( arg ); // Brackets_Main() 関数 // Fn() の残した選択範囲(またはキャレット位置)を回収 Sel[i].act = s.GetActivePos(); Sel[i].anc = s.GetAnchorPos(); diff += d.TextLength - dl; // 文字数の増減量(累積) } // マルチカーソル(複数選択範囲)を復帰 for ( var i = 0; i < sCount; i ++ ) { s.AddPos( Sel[i].anc, Sel[i].act ); } } </syntaxhighlight>
編集内容の要約:
MeryWikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MeryWiki:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の数式を計算してその答えを欄に入力してください (
ヘルプ
):
いちたすには =
キャンセル
編集ヘルプ
(新しいウィンドウで開きます)
スポンサーリンク
ナビゲーション メニュー
個人用ツール
ログインしていません
トーク
投稿記録
アカウント作成
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
編集
履歴表示
その他
検索
スポンサーリンク
スポンサーリンク
案内
メインページ
ヘルプ
よくある質問
マクロリファレンス
マクロライブラリ
プラグインライブラリ
構文ファイル
テーマ
寄付・開発支援
練習用ページ
開発室
開発者のブログ
ツール
スポンサーリンク