メインメニューを開く
ホーム
ヘルプ
よくある質問
マクロリファレンス
マクロライブラリ
プラグインライブラリ
構文ファイル
テーマ
寄付・開発支援
開発室
開発者のブログ
ログイン
設定
MeryWiki について
免責事項
MeryWiki
検索
「
カッコで囲う
」を編集中
2018年10月16日 (火) 21:31時点における
Sukemaru
(
トーク
|
投稿記録
)
による版
(
→組み込み用コード
:
コードを修正&ZIP更新
)
(
差分
)
← 古い版
|
最新版
(
差分
) |
新しい版 →
(
差分
)
警告: このページの古い版を編集しています。
公開すると、この版以降になされた変更がすべて失われます。
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。
スパム攻撃防止用のチェックです。 けっして、ここには、値の入力は
しない
でください!
= カッコで囲う (ポップアップメニューあり) = ポップアップメニューから任意の'''カッコ'''や'''ダッシュ'''などの種類を選択して、選択範囲を'''カッコ'''やいろいろな文字列で囲います。<br> 選択範囲がないばあい、基本的にはカーソル位置に (), <>, [], {}, 「」, … などを挿入します。 ルーラーの行番号のドラッグでの複数行選択やトリプルクリックでの行選択などで末尾改行が含まれているばあい、さいごの改行を無視します。 作成にあたり、「[[引用の追加]]」マクロと[[キーアサイン集]]の「[[キーアサイン集#括弧で挟む|括弧で挟む]]」マクロのコードを参考にしました。 * ソースコード<div id="ソースコード"> </div> <source lang="javascript"> #title = "カッコ..." #tooltip = "カッコで囲う" /** * ポップアップメニューからカッコの種類を選択して、選択範囲をカッコで囲う * 複数行の選択範囲で末尾が改行 \n のとき、さいごの改行は除外する * 非選択時には、それぞれことなる動作をする * * 項目(カッコの種類)の追加や変更も自由にでき、 * 項目を減らしたいばあいは m.Add(); の行を // でコメントアウトするだけでよい */ // 開きカッコ p1 を配列で定義 var p1 = new Array( "", "(", "<", "[", "{", "(", "「", "『", "【", " (", " (", " \"", " ", " - ", "――", "~", "" ); // 閉じカッコ p2 を配列で定義 var p2 = new Array( "", ")", ">", "]", "}", ")", "」", "』", "】", ") ", ") ", "\" ", " ", " - ", "――", "~", "" ); // メニュー項目のID("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "" ) // ポップアップメニュー項目の定義 var m = CreatePopupMenu(); // m.Add( "カッコの種類・表示名 (&アクセラレータキー)", ID ) // m.Add( … ); の各行は、任意に上下移動(並べ替え)してもよい。 // インデックス ID は 0番 スタートで、配列 p1, p2 の並び順と // テキスト変換処理の case ID: に対応しているので変更しないこと! m.Add( " ( 半角 丸カッコ ) (&P)", 1 ); // Parenthesis m.Add( "< 半角 山カッコ > (&A)", 2 ); // Angle brackets ※半角不等号 < / > (キーボードの[ね]/[る] m.Add( " [ 半角 角カッコ ] (&B)", 3 ); // square Brackets m.Add( " { 半角 波カッコ } (&C)", 4 ); // Curly brackets m.Add( "", 0, meMenuSeparator ); m.Add( "( 全角 丸カッコ ) (&R)", 5 ); // Round brackets m.Add( "", 0, meMenuSeparator ); m.Add( "「 全角 かぎカッコ 」 (&K)", 6 ); // Kakko m.Add( "『 全角 二重かぎカッコ 』 (&W)", 7 ); // White corner brackets m.Add( "【 全角 スミ付きカッコ 】 (&L)", 8 ); // Lenticular brackets m.Add( "", 0, meMenuSeparator ); m.Add( "␣( 全角 丸カッコ )␣ (&Z)", 9 ); // Zenkaku (full-width) m.Add( "␣ ( 半角 丸カッコ ) ␣ (&H)", 10 ); // Hankaku (half-width) m.Add( "␣ \" 半角 引用符 \" ␣ (&Q)", 11 ); // double Quotation mark キーボードの[ふ]キー m.Add( "␣ 半角 スペース ␣ (&S)", 12 ); // Space m.Add( "", 0, meMenuSeparator ); m.Add( "␣-␣ 半角 ハイフン ␣-␣ (&M)", 13 ); // hyphen-Minus キーボードの[ほ]キー m.Add( "―― 全角 ダッシュ ―― (&D)", 14 ); // Dash m.Add( "~ 全角 チルダ ~ (&T)", 15 ); // Tilde キーボードの[へ]キー m.Add( "", 0, meMenuSeparator ); m.Add( "1文字ずつ前後を削除 (&1)", 31 ); m.Add( "2文字ずつ前後を削除 (&2)", 32 ); m.Add( "3文字ずつ前後を削除 (&3)", 33 ); // m.Add( "", 0, meMenuSeparator ); // m.Add( "キャンセル", 0 ); // Escキーでキャンセルできるのでアクセラレータなし // ポップアップメニューを表示 // m.Track(0); ならキャレット位置、Track(1); ならカーソル位置にサブメニューがポップアップ var r = m.Track( mePosMouse = 1 ); // 選択されたメニュー項目のIDを r に格納する if ( r > 0 ) { var s = document.selection // 選択範囲の各座標を取得 var ax = s.GetTopPointX( mePosLogical ); var ay = s.GetTopPointY( mePosLogical ); var bx = s.GetBottomPointX( mePosLogical ); var by = s.GetBottomPointY( mePosLogical ); // 選択範囲の文字列を取得(さいごの改行を含めない) if ( ! s.IsEmpty && bx == 1 ) { s.SetActivePoint( mePosLogical, 1, by - 1 ); s.EndOfLine( false, mePosLogical ); s.SetAnchorPoint( mePosLogical, ax, ay ); } var st = s.Text; // IDごとのテキスト変換処理 switch (r) { // カッコ(スペースなし) case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: if ( s.IsEmpty ) { // 選択範囲がなければ document.Write( p1[r] + p2[r] ); // カッコ p1 & p2 だけをカーソル位置に挿入 s.SetActivePos( s.GetActivePos() - p2[r].length ); // カーソルをカッコのなかに移動 } else { // 選択範囲があれば s.Text = p1[r] + st + p2[r]; // 選択範囲 st をカッコ p1 & p2 で囲う s.SetAnchorPoint( mePosLogical, ax, ay ); // 選択範囲を復元 } break; // カッコ(スペースつき) case 9: case 10: case 11: case 12: if ( ! s.IsEmpty ) { // 選択範囲があれば s.Text = p1[r] + st + p2[r]; // 選択範囲 st をカッコ p1 & p2 で囲う s.SetAnchorPoint( mePosLogical, ax, ay ); // 選択範囲を復元 } break; // ハイフン、ダッシュ、チルダ case 13: case 14: case 15: if ( s.IsEmpty ) { // 選択範囲がなければ document.Write( p1[r] ); // 片側 p1 だけをカーソル位置に挿入 } else { // 選択範囲があれば s.Text = p1[r] + st + p2[r]; // 選択範囲 st をカッコ p1 & p2 で囲う s.SetAnchorPoint( mePosLogical, ax, ay ); // 選択範囲を復元 } break; // n文字ずつ前後を削除 case 31: case 32: case 33: if ( ! s.IsEmpty ) { // 選択範囲があれば var n; if ( r == 31 ) n = 1; // 1文字ずつ else if ( r == 32 ) n = 2; // 2文字ずつ else if ( r == 33 ) n = 3; // 3文字ずつ s.Text = st.slice( n, st.length - n ); // 選択範囲の両端から n文字ずつ 消す s.SetAnchorPoint( mePosLogical, ax, ay ); // 選択範囲を復元 } break; default: break; } } </source> <!-- 記 * case1~8 の "s.CharLeft( false, p2[r].length );" を "s.SetActivePos( s.GetActivePos() - p2[r].length );" に変更 (2018/08/27 sukemaru) * 「3文字ずつ前後を削除」を追加 (2018/10/12 sukemaru) * 「n文字ずつ前後を削除」の ID を変更 (2018/10/13 sukemaru) --> = 組み込み用コード = 追加コードです。<br> 全部入りのソースをダウンロード → 「[[メディア:カッコで囲う.zip|カッコで囲う.zip]](アイコン入り)」 (再修正 2018/10/16) == wiki用 文字列装飾 == 5種類の '''wiki用 文字列装飾''' を「[[#カッコで囲う (ポップアップメニューあり)|カッコで囲う]]」マクロのポップアップメニュー項目として組みこむことができます。 * '''太字''' : 選択範囲の両端を '''<nowiki>'''</nowiki>'''(シングルクオート×3) で囲います。 * ''斜体(Italic)'' : 選択範囲の両端を '''<nowiki>''</nowiki>'''(シングルクオート×2) で囲います。 * <u>下線</u> : 選択範囲の両端を '''<nowiki><u></nowiki>''' と '''<nowiki></u></nowiki>''' で囲います。 * <nowiki>[[内部リンク]]</nowiki> : 選択範囲の両端を '''<nowiki>[[</nowiki>''' と '''<nowiki>]]</nowiki>''' で囲い、<nowiki>[[リンク|ラベル]]</nowiki> 型のハイパーリンクにします。 * <nowiki>文字列</nowiki> : 選択範囲の両端を '''<nowiki>''' と '''</nowiki>''' で囲います。 ※「[[#カッコで囲う (ポップアップメニューあり)|カッコで囲う]]」マクロの既存の項目を減らしたいばあいは、 <u>''"m.Add( … );"''</u> の行を // でコメントアウトするとその項目をメニューから隠せます。 * 「[[#ソースコード|カッコで囲う]]」マクロのコードに以下のブロックを追加します。 <u>1. ''"p1", "p2"'' の配列を上書き</u> <source lang="javascript"> // 開きカッコ p1 を配列で定義 var p1 = new Array( "", "(", "<", "[", "{", "(", "「", "『", "【", " (", " (", " \"", " ", " - ", "――", "~", "'''", "''", "<u>", "[[", "<nowiki>" ); // 閉じカッコ p2 を配列で定義 var p2 = new Array( "", ")", ">", "]", "}", ")", "」", "』", "】", ") ", ") ", "\" ", " ", " - ", "――", "~", "'''", "''", "</u>", "]]", "</nowiki>" ); // メニュー項目のID("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", 19", "20" ) </source> <u>2. ''"m.Add( … );"'' のグループに追加(位置・並び順は任意)</u> <source lang="javascript"> m.Add( "", 0, meMenuSeparator ); // アクセラレータは任意で割りあててください m.Add( "''' wiki 太字 '''", 16 ); m.Add( "'' wiki 斜体 ''", 17 ); m.Add( "<u> wiki 下線 </u>", 18 ); m.Add( "[[ wiki リンク ]]", 19 ); m.Add( "<nowiki> </nowiki>", 20 ); </source> <u>3. ''"␣␣␣␣default:"'' のうえに挿入</u> <source lang="javascript"> // wiki 文字装飾 ※ 太字/斜体/下線/<nowiki> case 16: case 17: case 18: case 20: if ( s.IsEmpty ) { // 選択範囲がなければ document.Write( p1[r] + " " + p2[r] ); // p1 & p2 と全角スペースを挿入 s.SetActivePos( s.GetActivePos() - p2[r].length ); // カーソルをカッコのなかに移動 s.SetAnchorPos( s.GetActivePos() - 1 ); //カッコの中の全角スペースを範囲選択状態にする } else { // 選択範囲があれば s.Text = p1[r] + st + p2[r]; // 選択範囲 st を p1 & p2 で囲う s.SetAnchorPoint( mePosLogical, ax, ay ); // 選択範囲を復元 } break; // wiki 文字装飾 ※ [[リンク|ラベル]] case 19: if ( s.IsEmpty ) { // 選択範囲がなければ document.Write( p1[r] + " | " + p2[r] ); // p1 & p2 と " | " を挿入 s.SetActivePos( s.GetActivePos() - p2[r].length ); // カーソルをカッコのなかに移動 s.SetAnchorPos( s.GetActivePos() - 3 ); //カッコの中を範囲選択状態にする } else { // 選択範囲があれば s.Text = p1[r] + st + "|" + st + p2[r]; // 選択範囲 st を [[st|st]] に置換 s.SetActivePoint( mePosLogical, ax + p1[r].length, ay ); // p1 の後ろにカーソルを移動する } break; </source> *ポップアップメニュー項目とカッコの定義配列 ''"var px = new Array( … )"'' に16コ以上詰めこんでいるばあいは、追加コードのID '''16~20''' を適当な数字に変更し、配列を適宜修正してください。 ※ wiki の編集をする人はメッタにいないとおもいますので、適当にアレンジしてご活用ください。 (sukemaru 自身も、ふだんはコメントアウトしています) <!-- 記 ・「wiki用 文字列装飾」の項目を追加 (2018/10/12 sukemaru) ・コードを修正 (2018/10/16 sukemaru) --> == 挿入型コメントアウト == 3種類の '''挿入型コメントアウト''' を「[[#カッコで囲う (ポップアップメニューあり)|カッコで囲う]]」マクロのポップアップメニュー項目として組みこむことができます。 * /* JavaScript 挿入型コメントアウト1 */ : 選択範囲の両端を '''/* ''' と ''' */''' で囲います。 * /* *JavaScript コメントアウト2(複数行) */ : 選択範囲の両端を "'''/* \n'''" と "'''\n */'''" で囲い、範囲内の各行の行頭に "''' * '''" を付けます。 * <nowiki><!-- XML 挿入型コメントアウト --></nowiki> : 選択範囲の両端を '''<nowiki><!-- </nowiki>''' と '''<nowiki> --></nowiki>''' で囲います。 ※「[[#カッコで囲う (ポップアップメニューあり)|カッコで囲う]]」マクロの既存の項目を減らしたいばあいは、 <u>''"m.Add( … );"''</u> の行を // でコメントアウトするとその項目をメニューから隠せます。 * 「[[#ソースコード|カッコで囲う]]」マクロのコードに以下のブロックを追加します。 <u>1. ''"m.Add( … );"'' のグループに追加(位置・並び順は任意)</u> <source lang="javascript"> m.Add( "", 0, meMenuSeparator ); // 重複しているアクセラレータは任意で再割りあてしてください m.Add( "/*␣ コメントアウト1 ␣*/ (&J)", 21 ); // JavaScript comment-out m.Add( "/* *␣ コメントアウト2 ␣*/ (&J)", 22 ); // JavaScript comment-out (multiple lines) m.Add( "JS アンコメント (&U)", 23 ); // Uncomment m.Add( "", 0, meMenuSeparator ); m.Add( "<!--␣ コメントアウト ␣--> (&X)", 24 ); // XML comment-out m.Add( "XML アンコメント (&X)", 25 ); </source> <u>2. ''"␣␣␣␣default:"'' のうえに挿入</u> <source lang="javascript"> /* JavaScript コメントアウト1 */ case 21: var p1 = "/* ", p2 = " */"; if ( s.IsEmpty ){ // 選択範囲がなければ document.Write( p1 + p2 ); // コメントマーク /* & */ だけ挿入 s.SetActivePos( s.GetActivePos() - p2.length ); // カーソルをコメント枠のなかに移動 } else { // 選択範囲があれば s.Text = p1 + st + p2; // 選択範囲 st を /* コメントアウト */ s.SetAnchorPoint( mePosLogical, ax, ay ); // 選択範囲を復元 } break; /* * JavaScript コメントアウト2 */ case 22: var p1 = "/* \n", p2 = "\n */", ast = " * "; if ( s.IsEmpty ){ // 選択範囲がなければ document.Write( p1 + ast + p2 ); // コメントマーク /* \n * & * & \n */ だけ挿入 s.SetActivePos( s.GetActivePos() - p2.length ); // カーソルをコメント枠のなかに移動 } else { // 選択範囲があれば s.Text = CommentOutJS( st, p1, p2, ast ); // 選択範囲全体を /* *コメントアウト */ s.SetAnchorPoint( mePosLogical, ax, ay ); // 選択範囲を復元 } break; // JSアンコメント ※選択範囲内の各行頭のコメントマークにのみマッチ case 23: // case 21 & 22 の /*␣ JavaScript コメント ␣*/ をアンコメントする /* * このタイプの複数行のコメントにたいしてもアンコメント処理します。 * 行頭のアスタリスクの前後のスペースは削除されます。 */ if ( ! s.IsEmpty ) { // 選択範囲があれば s.Text = UnCommentJS( st ); // コメントアウトを解除 s.SetAnchorPoint( mePosLogical, ax, ay ); // 選択範囲を復元 } break; // <!-- XML コメントアウト --> case 24: var p1 = "<!-- ", p2 = " -->"; if ( s.IsEmpty ) { // 選択範囲がなければ document.Write( p1 + p2 ); // コメントマーク <!-- & --> だけ挿入 s.SetActivePos( s.GetActivePos() - p2.length ); // カーソルをカッコのなかに移動 } else { // 選択範囲があれば s.Text = p1 + st + p2; // 選択範囲 st を <!-- コメントアウト --> s.SetAnchorPoint( mePosLogical, ax, ay ); // 選択範囲を復元 } break; // XML アンコメント ※選択範囲の先頭と末尾のコメントマーク "<!-- " " -->" にマッチ case 25: // case 24 の <!--␣ XMLコメント ␣--> をアンコメントする if ( ! s.IsEmpty ) { // 選択範囲があれば s.Text = st.replace( /^\s*<!-- ?| ?-->\s*$/g , "" ); // 先頭と末尾のコメントマークを削除 s.SetAnchorPoint( mePosLogical, ax, ay ); // 選択範囲を復元 } break; </source> <u>3. ソースコードの末尾 ( "'''}'''" の下) に追加</u> <source lang="javascript"> function CommentOutJS( arg1, arg2, arg3, arg4 ) { // CommentOutJS( st, p1, p2, ast ) var a = arg1.split( "\n" ); // 選択範囲 st を "\n" で区切って配列 a に格納する for ( var i = 0; i < a.length; i++ ) // 「1行め」から「st の行数」回分だけ繰りかえし処理 a[i] = arg4 + a[i]; // 各行の先頭に ast = " * " を追加する return arg2 + a.join( "\n" ) + arg3; // 各行を "\n" で区切って連結し、先頭に p1 = "/*\n"、末尾に p2 = "\n */" を付け足す } function UnCommentJS( arg1 ) { // UnCommentJS( st ) var re1 = /^\/\*+\s*([^\n]*?\n?)/; // 先頭行の正規表現 var re2 = /(\n?[^\n]*?)\s*\*?\/$/; // 末行の正規表現 var re3 = /^\s*\*\s?/; // 中間行の行頭の正規表現 var a = arg1.split( "\n" ); // 選択範囲 st を "\n" で区切って配列 a に格納する for ( var i = 0; i < a.length - 1; i++ ) // 「1行め」から「st の行数 -1」回分だけ繰りかえし処理 a[i] = a[i].replace( re3 ,"" ); // 各行頭のアスタリスクを削除 return a.join( "\n" ).replace( re1 , "$1" ).replace( re2 , "$1" ); // 各行を "\n" で区切って連結し、先頭行と末行のコメントマークを削除 } </source> *ポップアップメニュー項目とカッコの定義配列 ''"var XX = new Array( … )"'' に20コ以上詰めこんでいるばあいは、追加コードのID '''21~25''' を適当な数字に変更してください。 <!-- 記 *「挿入型コメントアウト」の項目を追加 (2018/10/12 sukemaru) *「XML アンコメント」の replace() の正規表現を修正 (2018/10/13 sukemaru) *「JSアンコメント」の re3 の正規表現を修正 (2018/10/13 sukemaru) * ZIPファイルを修正 (2018/10/13 sukemaru) * ZIPファイルを修正 (2018/10/16 sukemaru) --> = カッコで囲う (ポップアップメニューなし) = 特定の種類のカッコを一発で追加する小マクロは[[キーアサイン集#括弧で挟む|キーアサイン集]]にもありますが、コードを改変して前後に付ける "カッコ" のかわりに "任意の文字列" を指定するばあいに「折り返し」表示と相性のよくない部分があります。 また、マクロ実行後のカーソル位置を選択範囲'''なし'''のときと'''あり'''のときとで変えたいばあいも、こちらのコードがよいでしょう。 <source lang="javascript"> #title = "( カッコ )" #tooltip = "( カッコ ) で囲う" // MeryWiki の マクロライブラリ >> キーアサイン集 の「括弧で挟む」を改変 // 選択範囲の前後にカッコ以外にも任意の文字列を追加するマクロとしても流用できます var s = document.selection; // 選択範囲の各座標を取得 var ax = s.GetTopPointX( mePosLogical ); var ay = s.GetTopPointY( mePosLogical ); // 選択範囲のテキストを取得し、カッコを追加 var st = s.Text; var pre = "("; // 前に付ける文字列 var sur = ")"; // 後ろに付ける文字列 s.Text = pre + st + sur; // カーソルを移動、または範囲選択 if ( ! st ) // 選択範囲なしだったばあい s.SetActivePos( s.GetActivePos() - sur.length ); // 後ろに付けた文字列 sur の前にカーソルを移動 else // 選択範囲があったばあい s.SetAnchorPoint( mePosLogical, ax, ay ); // カッコを含めて範囲選択 </source> = メモ = * 2018/08/24 (sukemaru) : ページを新規作成 * 2018/08/26 (sukemaru) : 「カッコで囲う (ポップアップメニューなし)」の節を追加 * 2018/08/27 (sukemaru) : 「カッコで囲う (ポップアップメニューあり)」のソースコードを修正 : case1~8 の "<u>s.CharLeft( false, p2[r].length );</u>" を "<u>s.SetActivePos( s.GetActivePos() - p2[r].length );</u>" に変更 * 2018/10/12 (sukemaru) : 「カッコで囲う (ポップアップメニューあり)」のソースコードに "3文字ずつ前後を削除" を追加 : 組みこみ用コード「wiki用 文字列装飾」と「挿入型コメントアウト」の節を追加 : 「カッコで囲う.zip」のダウンロードリンクを追加 * 2018/10/13 (sukemaru) : マクロのコードを微修正 : 「カッコで囲う.zip」を差し替え
編集内容の要約:
MeryWikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MeryWiki:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の数式を計算してその答えを欄に入力してください (
ヘルプ
):
いちたすには =
編集を中止
編集の仕方
(新しいウィンドウで開きます)
スポンサーリンク