HTMLのテキスト部分を順次選択するマクロ
カーソル位置の論理行の内容を選択します。
論理行頭のタブや半角スペース、論理行末の改行は除いて、テキストとして意味のある部分を選択します。
連続して実行すると、次の論理行の内容を選択します。
空行は飛ばします。
HTMLタグがある場合は、タグの間にあるテキストを選択します。
連続して実行すると、次のタグの間にあるテキストを選択します。
コメントやPHPのタグも、タグとみなします。
HTML以外でも、行の内容を順次選択するマクロとして使えます。
ダウンロード
更新履歴
- Version 1.20 (2025/2/21)
- マクロ名の変更
- サブルーチンの修正
- 探索を左方向と右方向で分けた
- 不要な処理の削除
- ソースコードの整理
過去の履歴
- Version 1.12 (2025/1/28)
- 範囲選択に関する修正
- タグの先頭における動作の修正
- 対象がなければ警告音で終了するようにした
- Version 1.11 (2024/1/10)
- コメント、PHPタグに関する修正
- Version 1.10 (2023/11/25)
- ソースコード全体の書き直し
- colorcodeの使用を廃止
- 汎用性の向上
- Version 1.00 (2023/10/7)
- 公開
ソースコード
setcompatiblemode 0x20200;
#x = x; #y = y;
#cont = 0;
disabledraw;
if (selecting) {
escape;
if (code == 13) moveto2 0, lineno + 1; //連続実行時の処理
else if (code == -1) {
beep;
goto End;
}
call CheckTagTop;
if (##return) #cont = 1;
}
if (column && (!#cont)) call SeekLeft;
call SeekRight;
while (code == 13 && #ct == #ce) { //論理行末の処理
moveto2 0, lineno + 1;
call SeekRight;
}
if (#ct == #ce) { //対象がなければ警告音で終了
moveto #x, #y;
beep;
goto End;
}
moveto2 #ct, lineno;
beginsel;
moveto2 #ce, lineno;
endsel;
goto End;
SeekLeft: //左方向にタグを探索
while (column) {
left;
call CheckTagTop;
if (##return) break;
call CheckTagEnd;
if (##return) {
right;
break;
}
}
return;
SeekRight: //右方向に行の内容及びタグの間を探索
if (!column) while (code == 9 || code == 32) right; //論理行頭のタブ、半角スペースを無視
call SkipTag;
#ct = column;
while (code != 13 && code != -1) {
call CheckTagTop;
if (##return) break;
call CheckTagEnd;
if (##return) #ct = column + 1;
right;
}
#ce = column;
return;
SkipTag: //連続するタグを無視
while (1) {
call CheckTagTop;
if (!##return) break;
$$str = gettext2(column, lineno, column + 4, lineno);
if (!strstr($$str, "<!--")) searchdown "-->";
else if (!strstr($$str, "<?")) searchdown "?>";
else searchdown "[^ <=>?-]>", regular;
if (result) moveto selendx, selendy;
else break;
}
return;
CheckTagTop: //カーソル位置がタグの先頭かを調べる
##r = 0;
if (code == '<') {
right;
if ((code >= 'a' && code <= 'z') || (code >= 'A' && code <= 'Z')
|| code == '!' || code == '/' || code == '?') ##r = 1;
left;
}
return ##r;
CheckTagEnd: //カーソル位置がタグの末尾かを調べる
##r = 0;
if (column && code == '>') {
left;
if (!(code == 32 || code == '-'
|| code == '<' || code == '=' || code == '>')) ##r = 1;
else if (column && code == '-') {
left;
if (code == '-') ##r = 1;
right;
}
right;
}
return ##r;
End: //終了処理
enabledraw;
endmacro;
colorcodeを使えばもっと簡単に書けますし、最初はそうしていたんですが、「ファイルタイプ別の設定」に依存するので、汎用性を持たせるために全体を書き直しました。
これにより、HTML以外のファイルでも使いやすくなっています。
ただし、あくまでもHTMLを優先しているので、HTMLタグのような記述があると、行選択するつもりが部分選択になってしまう場合があります。
一応、演算子のような記述は検出しないようにしてあります。