web404

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

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

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

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

このマクロにショートカットキーを割り当てて、通常時はbrタグ用、範囲選択時は段落用として使うことを想定しています。
もちろん、このページもこのマクロを使って作っています。

ダウンロード

p_br.zip

更新履歴

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