「カッコで囲う」の版間の差分
細 →メモ |
「引用符を追加/削除」の節を追加 |
||
| 1行目: | 1行目: | ||
全部入りのソースをダウンロード → 「[[メディア:カッコで囲う.zip|カッコで囲う.zip]](アイコン入り)」 (最終更新 2018/10/19) | |||
= カッコで囲う (ポップアップメニューあり) = | = カッコで囲う (ポップアップメニューあり) = | ||
ポップアップメニューから任意の'''カッコ'''や'''ダッシュ'''などの種類を選択して、選択範囲を'''カッコ'''やいろいろな文字列で囲います。<br> | ポップアップメニューから任意の'''カッコ'''や'''ダッシュ'''などの種類を選択して、選択範囲を'''カッコ'''やいろいろな文字列で囲います。<br> | ||
| 145行目: | 147行目: | ||
= 組み込み用コード = | = 組み込み用コード = | ||
追加コードです。<br> | 追加コードです。<br> | ||
== wiki用 文字列装飾 == | == wiki用 文字列装飾 == | ||
| 213行目: | 214行目: | ||
*ポップアップメニュー項目とカッコの定義配列 ''"var px = new Array( … )"'' に16コ以上詰めこんでいるばあいは、追加コードのID '''16~20''' を適当な数字に変更し、配列を適宜修正してください。 | *ポップアップメニュー項目とカッコの定義配列 ''"var px = new Array( … )"'' に16コ以上詰めこんでいるばあいは、追加コードのID '''16~20''' を適当な数字に変更し、配列を適宜修正してください。 | ||
※ wiki の編集をする人はメッタにいないとおもいますので、適当にアレンジしてご活用ください。 | ※ wiki の編集をする人はメッタにいないとおもいますので、適当にアレンジしてご活用ください。 | ||
(sukemaru | (sukemaru 自身も… ふだんはコメントアウトしています) | ||
<!-- 記 | <!-- 記 | ||
| 228行目: | 229行目: | ||
* <nowiki><!-- XML 挿入型コメントアウト --></nowiki> | * <nowiki><!-- XML 挿入型コメントアウト --></nowiki> | ||
: 選択範囲の両端を '''<nowiki><!-- </nowiki>''' と '''<nowiki> --></nowiki>''' で囲います。 | : 選択範囲の両端を '''<nowiki><!-- </nowiki>''' と '''<nowiki> --></nowiki>''' で囲います。 | ||
※ "JS アンコメント" はこのマクロで挿入した "JavaScript コメントアウト1 / 2" にしか適さないかもしれません。<br> | |||
※「[[#カッコで囲う (ポップアップメニューあり)|カッコで囲う]]」マクロの既存の項目を減らしたいばあいは、 <u>''"m.Add( … );"''</u> の行を // でコメントアウトするとその項目をメニューから隠せます。 | ※「[[#カッコで囲う (ポップアップメニューあり)|カッコで囲う]]」マクロの既存の項目を減らしたいばあいは、 <u>''"m.Add( … );"''</u> の行を // でコメントアウトするとその項目をメニューから隠せます。 | ||
| 370行目: | 372行目: | ||
s.SetAnchorPoint( mePosLogical, ax, ay ); // カッコを含めて範囲選択 | s.SetAnchorPoint( mePosLogical, ax, ay ); // カッコを含めて範囲選択 | ||
</source> | </source> | ||
= 引用符を追加/削除 = | |||
”引用符” を一発で追加する小マクロは 「マテリアルデザインっぽいアイコンと『小マクロ集』」 の 「[[マテリアルデザインっぽいアイコンと『小マクロ集』#”引用符”を追加|”引用符”を追加]]」 にもありますが、こちらのマクロでは 「引用符(または指定した文字列)で囲う」操作と「囲っている引用符を削除する」操作をトグル実行できます。 | |||
* 文字列指定は ”引用符” 以外のカッコや HTML タグなどに変更できます。 | |||
* 選択範囲が複数行(論理行)にまたがっている場合に、選択範囲「全体」を一組の ”引用符” で囲うか、選択範囲内の「各行ごと」に ”引用符” で囲うかを選択することもできます。 | |||
* マクロ実行後のカーソル位置を選択範囲'''なし'''のときと'''あり'''のときとで変えたい場合には、数種類のパターンから選択できるようになっています。 | |||
<source lang="javascript"> | |||
#title = "''引用符'' で囲う" | |||
#tooltip = "ダブルクォーテーションで囲う" | |||
// ----------------------------------------------------------------------------- | |||
// 選択範囲を指定の文字列("引用符")で囲う | |||
// 選択範囲がすでに "引用符" で囲われていたら引用符ふたつ "" を削除する | |||
// ----------------------------------------------------------------------------- | |||
/* ■文字列を指定 */ | |||
var pre = '"'; // "前に付ける文字列" | |||
var sur = '"'; // "後に付ける文字列" | |||
// ※ 文字列をダブルクォーテーション "" で囲うなら、中の「 " 」は要エスケープ 「'"'」→ 「"\""」 | |||
// ※ 引用符以外の文字列を指定するなら 「'"'」→ 「"ほげ"」「"ふが"」 | |||
// ※ 片側しか必要ないならいずれかを 「'"'」→ 「""」 (行を削除するのは不可) | |||
/* ■複数行フラグ */ | |||
// var multi = false; | |||
var multi = true; | |||
// ・multi = false; で、選択範囲「全体」の前後に文字列 pre / sur を追加 | |||
// ・multi = true; にすると、選択範囲の「各行」ごとに文字列 pre / sur で囲う | |||
/* ■挿入フラグ */ | |||
var ins = false; | |||
// var ins = true; | |||
// ・ins = false; で、選択範囲がないときはマクロを中止する | |||
// ・ins = true; にすると、選択範囲がないときにはカーソル位置に pre / sur を挿入する | |||
// (multi = true のときには空行にも挿入する) | |||
// ※■複数行フラグが有効 ( multi = true ) のときは、空白文字だけの行は空行と見做す | |||
/* ■終了後フラグ */ | |||
var endPos = 5; // 指定できる値は 0 ~ 5( 6 以上の値は 0 と同じ) | |||
// 0. カーソルは "引用符" の後ろ ※範囲選択なし | |||
// 1. カーソルは "引用符" の中へ移動する ※範囲選択なし | |||
// 2. マクロ実行前に範囲選択がなければカーソルは "引用符" の中へ、あれば "引用符" の後ろへ移動する ※範囲選択なし) | |||
// 3. マクロ実行前に範囲選択がなければカーソルは "引用符" の中へ移動 (※範囲選択なし)、あれば "引用符" を含めた全体を選択範囲にする (※カーソルは "引用符" の後ろへ) | |||
// 4. "引用符" を含めた全体を選択範囲にする ※カーソルは "引用符" の後ろへ | |||
// 5. "引用符" を含めた全体を選択範囲にする ※カーソル位置はマクロ実行前の側(先頭 or 末尾)へ | |||
// | |||
// ※ カッコを含めた選択範囲を残す(4 か 5)ようにすると、連続実行で 追加 <=> 削除 のトグルができる | |||
// ※ 挿入フラグが無効 ( ins = false ) の場合、「0 と 2」、「3 と 4」の結果はそれぞれ同じになる | |||
// ※ "引用符" を削除したときの結果は、「0 ~ 2」、「3 と 4」の結果はそれぞれ同じになる | |||
// ※ 複数フラグが有効 ( multi = true ) のとき、 "引用符" の中へ移動する「0 と 1」は適さないとおもわれる | |||
// ----------------------------------------------------------------------------- | |||
var s = document.selection; // 選択範囲 | |||
// ■挿入フラグが無効 ( ins = false ) で 選択範囲がない なら | |||
if ( ! ins && s.IsEmpty ) | |||
Quit(); // マクロ中止 | |||
Redraw = false; | |||
// ■挿入フラグが有効 ( ins = true ) または 選択範囲がある なら | |||
// 選択範囲の開始&終了の位置 | |||
var anc = s.GetAnchorPos(); // 選択範囲の開始位置 (キャレットのない側) | |||
var act = s.GetActivePos(); // 選択範囲の終了位置 (キャレットのある側) | |||
// 選択範囲の先頭&末尾の位置 | |||
var tp; // 選択範囲の先頭 | |||
var bp; // 選択範囲の末尾 | |||
if ( anc < act ) { | |||
tp = anc; bp = act; | |||
} else { | |||
tp = act; bp = anc; | |||
} | |||
// 選択範囲の先頭&末尾の各座標 | |||
// var tx = s.GetTopPointX( mePosLogical ); | |||
var ty = s.GetTopPointY( mePosLogical ); | |||
var bx = s.GetBottomPointX( mePosLogical ); | |||
var by = s.GetBottomPointY( mePosLogical ); | |||
// ■選択範囲の末尾が行頭 x = 1 にあるときの調整 (末尾の改行を含めない) | |||
// ※複数行の選択範囲の末尾が空行のとき、マクロを連続で実行(トグル)すると選択範囲が減っていく… | |||
if ( ty != by && bx == 1 ) { | |||
bp --; | |||
s.SetActivePos( tp ); | |||
s.SetAnchorPos( bp ); | |||
} | |||
var st = s.Text; // 選択範囲の文字列を取得 | |||
s.Text = AddDelBrackets( st, pre, sur ); // "引用符" を追加/削除 | |||
var dp = s.GetActivePos(); | |||
// 0. この時点でカーソルは sur (後に付けた文字列) のうしろ (※範囲選択なし) | |||
// ■カーソルを移動/選択範囲を復旧 | |||
// 1. カーソルは "引用符" の中へ移動する ※範囲選択なし | |||
if ( endPos == 1 ) | |||
s.SetActivePos( dp - sur.length ); | |||
// 2. マクロ実行前に範囲選択がなければカーソルは "引用符" の中へ、あれば "引用符" の後ろへ移動する ※範囲選択なし | |||
if ( endPos == 2 ) { | |||
if ( ! st ) s.SetActivePos( dp - sur.length ); | |||
else s.SetActivePos( dp ); | |||
} | |||
// 3. マクロ実行前に範囲選択がなければカーソルは "引用符" の中へ移動 ※範囲選択なし | |||
// あれば "引用符" を含めた全体を選択範囲にする ※カーソルは "引用符" の後ろへ) | |||
if ( endPos == 3 ) { | |||
if ( ! st ) s.SetActivePos( dp - sur.length ); | |||
else { s.SetActivePos( dp ); s.SetAnchorPos( tp ); } | |||
} | |||
// 4. "引用符" を含めた全体を選択範囲にする ※カーソルは "引用符" の後ろへ | |||
if ( endPos == 4 ) { | |||
s.SetActivePos( dp ); s.SetAnchorPos( tp ); | |||
} | |||
// 5. "引用符" を含めた全体を選択範囲にする ※カーソル位置はマクロ実行前の側(先頭 or 末尾)へ | |||
if ( endPos == 5 ) { | |||
if ( anc < act ) { s.SetActivePos( dp ); s.SetAnchorPos( tp ); } | |||
else { s.SetActivePos( tp ); s.SetAnchorPos( dp ); } | |||
} | |||
// ----------------------------------------------------------------------------- | |||
// 関数 function AddDelBrackets() | |||
function AddDelBrackets( arg1, arg2, arg3 ) { // ← AddDelBrackets( st, pre, sur ) | |||
// ■複数行フラグが無効なら ( multi = false ) | |||
if ( ! multi ) { | |||
var a = []; a.push( arg1 ); // 選択範囲の文字列全体 st をそのまま配列 a に格納する | |||
} | |||
// ■複数行フラグが有効なら ( multi = true ) | |||
else | |||
var a = arg1.split( "\n" ); // 選択範囲 st を "\n" で区切って配列 a に格納する | |||
for ( var i = 0; i < a.length; i ++ ) { // 「1行め」から繰りかえし処理 | |||
// 選択範囲がカッコで囲われているとき | |||
if ( a[i].substr( 0, arg2.length ) == arg2 && a[i].substr( a[i].length - arg3.length, arg3.length ) == arg3 ) | |||
a[i] = a[i].slice( arg2.length, a[i].length - arg3.length ); // 各行のカッコを削除 | |||
// カッコで囲われていないとき | |||
else if ( ins || ! a[i].match( /^[\s ]*$/g ) ) | |||
// ■挿入フラグが有効 ( ins = true ) または t が空行ではないなら | |||
a[i] = arg2 + a[i] + arg3; // 前後にカッコをつける | |||
else | |||
// ■挿入フラグが無効 ( ins = false ) のときの空行は | |||
continue; // スルー(空行のまま) | |||
} | |||
return a.join( "\n" ); // 各行を "\n" で区切って連結しなおす | |||
} | |||
</source> | |||
<!-- 記 | |||
*「引用符を追加/削除」の項目を追加 (2018/10/18 sukemaru) | |||
--> | |||
= メモ = | = メモ = | ||
| 385行目: | 551行目: | ||
* 2018/10/13 - 2018/10/16 (sukemaru) | * 2018/10/13 - 2018/10/16 (sukemaru) | ||
: マクロのコードを微修正 | : マクロのコードを微修正 | ||
: 「カッコで囲う.zip」を差し替え | |||
* 2018/10/19 (sukemaru) | |||
: 「引用符を追加/削除」の節を追加 | |||
: 「カッコで囲う.zip」を差し替え | : 「カッコで囲う.zip」を差し替え | ||
スポンサーリンク