web404

HTMLのpタグとbrタグを状況に応じて挿入するマクロ

選択範囲と改行をもとに、pタグとbrタグを挿入します。
範囲選択していなければ、カーソル位置にbrタグを挿入します。

選択範囲の論理行頭と論理行末の適切な箇所に、pタグとbrタグを挿入します。
論理行頭にタブや半角スペースがあれば、その後にpタグを挿入します。
改行にはbrタグを挿入します。
空行を段落の区切りとみなして、前後にpタグを挿入します。
空行には何もしません。
対象は論理行単位なので、選択範囲が行の途中でも論理行頭と論理行末にタグを挿入します。

段落を空行で分けているテキストなら、複数の段落を一括処理できます
もともとは、改行で整形したプレーンテキストを、一気にHTMLの段落にマークアップする目的で作りました。
すでにHTMLでマークアップされているテキストのことは考慮していません。
複数選択にも対応していません。

通常時はbrタグ用、範囲選択時は段落用として使います。
もちろん、このページもこのマクロを使って作っています。


ダウンロード

p_br.zip


更新履歴

Version 1.04 (2025/01/28)
サブルーチンの削除
Version 1.03 (2023/12/20)
ファイル末尾に関する修正
Version 1.02 (2023/12/4)
段落のマークアップの対象を範囲選択するようにした
タグを挿入する対象がなければ警告音を出すようにした
Version 1.01 (2023/10/7)
ソースコードの整理
Version 1.00 (2023/8/28)
公開

ソースコード

if (!selecting) {
	insert "<br>";
	endmacro;
}

#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要素の開始タグや終了タグを任意の位置に挿入したい場合は、タグを直接入力するか、他のマクロを使ったほうがいいです。
このマクロは、あくまでも段落のマークアップの自動化と、一括処理に重きを置いたものです。