段落と改行を<p>と<br />で挟み込むには…No.00130
Az さん 09/10/17 09:24
 
はじめまして。
プレーンなテキスト文章の一定部分を選択し(数十行とかです)、その選択範囲に対
して、段落は<p></p>、改行は<br />、というようにHTMLのタグをつけていくマクロ
はどのようにしたら可能なのでしょうか?

例えば、(下記の↓は改行コードで行末の※は改行なしで次の行と連結しているとい
う場合です)

○○○↓
○○○○○○※
○○○○○○※

○○○○○○※
○○○↓
○○○○○○※


というような文章を選択し、

<p>
○○○<br />
○○○○○○※
○○○○○○※
</p>
<p>
○○○○○○※
○○○<br />
○○○○○○※
</p>

このように段落と段落内改行を、HTMLのタグで挟み込みたいのです。
フォーラム内検索や、ネット検索で調べてみたのですが、ひとつだけ、

 disabledraw;
 gofiletop;
 insert "<p>";
 replaceallfast "\\n\\n\\n","糜2鋤",regular;
 replaceallfast "\\n\\n","糜鋤",regular;
 replaceallfast "\\n","<BR>\\n",regular ;
 replaceallfast "糜鋤","</p>\\n<br>\\n<p>",regular;
 replaceallfast "糜2鋤","</p>\\n<br>\\n<br>\\n<p>",regular;

このようなマクロがあり、イメージとしてはこのような感じです。
ただ、上記のマクロですと、選択部分ではなく文章全体にタグが付けられてしまう、
また最後の</p>タグが付けられないようでしたので、

if (!selecting){
 //範囲選択中でない場合マクロの終了
 message "範囲を選択してマクロを実行してください。";
 endmacro;
}
 disabledraw;
 gofiletop;
 insert "<p>";
 replaceallfast "\\n\\n\\n","糜2鋤",regular;
 replaceallfast "\\n\\n","糜鋤",regular;
 replaceallfast "\\n","<br />\\n",regular;
 replaceallfast "糜鋤","\\n</p>\\n<p>\\n",regular;
 replaceallfast "糜2鋤","\\n</p>\\n<p>\\n",regular;
 gofileend;
 insertreturn;
 insert "</p>";

としたところ、選択範囲、及び最後の</p>タグも付けられたのですが、これですと、
選択範囲をマクロでタグ付けしますと、選択していなかった部分が、マクロ実行後に
消えてしまうのです。(100行の文章中、30行を選択しマクロ実行すると、残りの70
行が消えてしまう、という意味です)

そもそも、元のマクロの書き方でいいのかどうか、そのあたりもわかっていません。
(作者さんと思われる方のブログは、既に作者さんがそこを退会されたらしく、更新
がとまっていまして、過去ログ扱いのような感じになっていましたので、今回は元の
マクロの出典先をあえて書きませんでした(ネットの検索で「秀丸 マクロ 段落 改
行 p br」というワードで探すと、たぶん1ページめには出てきますが…)

HTMLのタグをすべてつけていくのではなく、ブログ等、CMSで作られたサイトは、既
にレイアウトに必要なタグは、最初にCSSと一緒に組んでしまうため、後々コンテン
ツ(テキスト)をそこに、上記のような体裁でという場合に、選択範囲を<p><br /><
/p>で囲めると、よいな、ということなのです。

あと、元のマクロを
replaceallfast "糜鋤","</p>\\n<br>\\n<p>",regular;

replaceallfast "糜鋤","\\n</p>\\n<p>\\n",regular;
このようにしたのは、<p>タグが
<p>○○○
というふうに付くのではなく
<p>
○○○
というふうにしたかったからです。

[ ]
RE:00130 段落と改行を<p>と<br />で挟みNo.00131
K'zawa さん 09/10/17 12:06
 
Azさん、こんにちは。
K'zawaです。

範囲選択は最初の置換後に解除されますよ。
部分編集を使ってはいかがですか?(要 Ver6以降)

disabledraw; の前に

    setcompatiblemode 0x0F;
    rangeeditin;

最後に

    rangeeditout;

[ ]
RE:00130 段落と改行を<p>と<br />で挟みNo.00132
Iranoan さん 09/10/17 12:13
 
 Az さん今日は、Iranoan です。
> プレーンなテキスト文章の一定部分を選択し(数十行とかです)、その選択範囲に対
> して、段落は<p></p>、改行は<br />、というようにHTMLのタグをつけていくマクロ
> はどのようにしたら可能なのでしょうか?
 段落は連続する改行 (行頭の改行) と解釈すれば良いのでしょうか?
 それなら、おおよそ、末尾の要領で良いと思います。
 何をしているかは、マクロ・ヘルプを見てください。また
・選択範囲の最後が EOF
・選択範囲に行頭の改行が無い
の時はどうするか? といった処理が幾つか抜けているので、後はお好みに合わ
せて変更して下さい。
・rangeeditin を使って一時的に部分編集
・colormarker を使って選択範囲の最後に印をつけて、行数の変化に対処
のどちらかの方法が必要になると思います。
//------------------------------------------------------------
if( !selecting ){
  message "範囲選択して下さい";
  endmacro;
}
#ex = selendx;
#ey = selendy;
begingroupundo;
replaceallfast ".$", "\\0<br />", regular, inselect;
moveto seltopx, seltopy;
if( code == 0x0D )insert "<p>";
else{
  #add_enter = 1;
  insert "<p>\n";
}
beginsel;
moveto #ex, linenotoy( columntox( seltopx, seltopy ),
  ytolineno( #ex, #ey + #add_enter ) );
replaceallfast "^$", "</p>\n<p>", regular, inselect;
selectline;
if( gettext( seltopx, seltopy, selendx, selendy, 1 ) == "<p>\x0D\x0A" )delete;
escape;
escapeinselect;
endgroupundo;

[ ]
RE:00132 段落と改行を<p>と<br />で挟みNo.00133
Az さん 09/10/17 18:24
 
K'zawaさま、Iranoanさま
アドバイス、ありがとうございました。
ご返信送れてすみませんでした。

早速、お二方の2つのアドバイスを基に試してみました。

K'zawaさまの、部分編集を利用して、というのは、今後ほかのことでも部分編集は利
用頻度が高くなりそうなので、これを機会に、部分編集でのマクロ実行、というのも
トライしていきたいと思いました。
ちょうど、今使用しているのが、Ver8のβ版ですので…(といっても、ほとんどの機
能を使いこなせてはいないのですが…)。

Iranoanさま。ご丁寧に、コードを掲載していただいてありがとうございます。
私が、最初の投稿の仕方がよくなく、このままで、というわけにはいかなかったので
すが、コードは理解できる範囲でしたので、これからやる亊にフィットするようにし
てみようと思っています。
※<p><br /></p>で挟む範囲が、1つのドキュメントに何箇所か分散していまして、ま
たその分散の中に段落がいくつか入ってくるという入れ子状態でしたし、加えて、段
落と段落あいだの改行が1行の場合もあれば3行くらいある場合もあり、そのあたり
をお伝えしきれなかったという辺り、私の最初の投稿内容に不備がありましたもので
すので…。

兎にも角にも、お二方のアドバイスは私にとっては貴重なものでした(今後、少なく
とも1年間くらいは、量はさほどでもないのですが、ほぼ毎日、1つづつのプレーン
テキストの部分部分を段落と改行のタグで括る作業がありましたので)。

秀丸エディタに関しては、十分に機能を使いこなせてないレベルでしたので、こちら
に質問を投稿するのは最初躊躇していましたが、今回、お聞きして本当のよかたと思
っています。

重ね重ね、K'zawaさま、Iranoanさま、アドバイスいただいてありがとうございました。
これからも何かありましたら、これに懲りずによろしくお願いいたします。
それでは、失礼いたします。

Az

[ ]
RE:00133 段落と改行を<p>と<br />で挟みNo.00134
Iranoan さん 09/10/17 18:37
 
 Az さん今日は、Iranoan です。
 取り敢えず、
> 段
> 落と段落あいだの改行が1行の場合もあれば3行くらいある場合もあり
については、
> replaceallfast "^$", "</p>\n<p>", regular, inselect;

replaceallfast "^\n\n?\n?\n?\n?", "</p>\n<p>\n", regular, inselect;
とでもすれば良いかと。

[ ]
RE:00134 段落と改行を<p>と<br />で挟みNo.00135
Az さん 09/10/17 22:48
 
Iranoanさま。
こんばんは。引き続き、アドバイスをくださり、とても嬉しいです。
空行の改行部分は、正規表現を使っていらっしゃったので、その辺り思案していた間
に、Replyをいただき、お陰で空行の改行は</p><p>で対で収まりました。
ただ、今もって紐解けないのは、段落の最後の行に必ず<br />がはいってしまい
<p>
○○<br />
○○<br />
</p>
もしくは、一行の場合ですと
<p>
○○<br />
というように、選択した文章の段落が複数・単数に関わらず、最後には必ず<br />が
入ってしまうといった点です。

上記は単数の段落でしたが、複数だと
<p>
○○<br />
○○<br />
</p>
<p>
○○<br />
○○<br />
と、</p>の閉じタグの有無に関わらず、段落の最後の行の改行が<br />が</p>タグの
前に入ってしまい、選択文の最後の段落の行末改行は<br />のみで終わってしまう、
といった辺りで、今のところ試行錯誤していたりします。
ですが、なんとか、解決しましたら、その旨、お知らせするようにいたします。
すみません。また長々と書いてしまって。

[ ]