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