HTMLのpタグとbrタグを状況に応じて挿入するマクロ
選択範囲と改行をもとに、pタグとbrタグを挿入します。
範囲選択していなければ、カーソル位置にbrタグを挿入します。
選択範囲の行頭と行末の適切な箇所に、pタグとbrタグを挿入します。
行頭にタブや半角スペースがあれば、その後にpタグを挿入します。
改行にはbrタグを挿入します。
空行を段落の区切りとみなして、前後にpタグを挿入します。
空行には何もしません。
対象は行単位なので、選択範囲が行の途中でも行頭と行末にタグを挿入します。
段落を空行で分けているテキストなら、複数の段落を一括処理できます。
もともとは、改行で整形したプレーンテキストを、一気にHTMLの段落にマークアップする目的で作りました。
すでにHTMLでマークアップされているテキストのことは考慮していません。
複数選択にも対応していません。
通常時はbrタグ用、範囲選択時は段落用として使います。
もちろん、このページもこのマクロを使って作っています。
ダウンロード
更新履歴
- Version 1.03 (2023/12/20)
- ファイル末尾に関する修正
- Version 1.02 (2023/12/4)
- 段落のマークアップの対象を範囲選択するようにした
- タグを挿入する対象がなければ警告音を出すようにした
- Version 1.01 (2023/10/7)
- ソースコードの整理
- Version 1.00 (2023/8/28)
- 公開
ソースコード
call Paragraph;
insert "<br>";
endmacro;
Paragraph: //選択範囲を行単位で判定して段落にマークアップ
if (!selecting) return;
#lt = seltoplineno; #le = selendlineno;
disabledraw;
begingroupundo;
escape;
moveto2 0, #le;
golineend2;
$str0 = gettext2(0, #lt, column, lineno);
moveto2 0, #lt;
call SkipBlank;
insert "<p>";
while (lineno < #le) {
golineend2;
insert "<br>";
moveto2 0, lineno + 1;
while (code == 9 || code == 32) right; //行頭のタブ、半角スペースを無視
if (code == 13 || code == -1) { //空行が見つかれば前後にpタグを挿入
undo;
insert "</p>";
call SkipBlank;
insert "<p>";
}
}
golineend2;
insert "</p>";
goto End;
SkipBlank: //タブ、半角スペース、改行を無視
while (code == 9 || code == 13 || code == 32) {
while (code == 9 || code == 32) right;
while (code == 13) {
if (lineno == #le) goto End;
moveto2 0, lineno + 1;
}
}
if (code == -1) goto End;
return;
End: //対象を範囲選択して終了
moveto2 0, #lt;
beginsel;
moveto2 0, #le;
golineend2;
endsel;
$str = gettext2(0, #lt, column, lineno, 1);
if ($str == $str0) beep;
endgroupundo;
enabledraw;
endmacro;
段落のマークアップを行単位で判定しているのは、仕様です。
選択範囲の横位置は関係ありません。
厳密に選択範囲の先頭と末尾にpタグを挿入するよりも、行単位で判定して行頭と行末にタグを挿入したほうが、私にとっては便利だったからです。
たとえば、1文字だけの選択でその行を段落にマークアップできるほか、複数行の範囲選択がアバウトでも機能します。
p要素の開始タグや終了タグを任意の位置に挿入したい場合は、タグを直接入力するか、他のマクロを使ったほうがいいです。
このマクロは、あくまでも段落のマークアップの自動化と、一括処理に重きを置いたものです。