藤井 深さんへ。
以下のマクロを使ってみてください。
引用符を削除した後、指定した桁数で整形し、そして引用符を追加します。
XWIDE へ整形する1行の長さを指定します
str へ削除する引用符を指定して下さい
str2 へ追加する引用符を指定して下さい
範囲が選択されている場合はその選択範囲内が、
選択されていない場合はテキスト全体が対象となります。
------------------------------------------------------------------
#define XWIDE 60 // 整形する1行の長さを指定します
// 行頭禁則文字を指定します
char *ps=" 、。,.:;!?)]}」-、。, .:;!?)〕]}〉》」』】’”";
// 行末禁則文字を指定します
char *pe="([{「(〔[{〈《「『【‘“";
main()
{
int i, len;
char line[3300];
char *str = ">>"; // str へ削除する引用符を指定して下さい
char *str2 = "||"; // str2 へ追加する引用符を指定して下さい
int smode = 0;
int saveIns = Ins();
int sInd = Indent();
InsMode(1);
DispOff2();
if(Block() == 1 || Block() == 2)
{ // 範囲選択モード
smode = 1;
BlokCut();
PutChr(0<<8);
BlokPast();
}
// 引用符削除
Top();
while(Linestat() >= 0)
{
Getline(line);
len = Strlen(str);
if(strncmp(line, str, len) == 0)
{
for(i = 0 ; i < len; i++)
Del();
}
REdge();
Right();
}
// 指定した桁数で整形
Top();
AIndent(0);
while(Linestat() >= 0)
danraku();
AIndent(sInd);
// 引用符追加
Top();
while(Linestat() >= 0)
{
PutStr(str2); // 引用符を書く
REdge();
Right();
}
if(smode)
{ // 範囲選択モード
PutChr(71<<8);
BlokCopy();
Close();
BlokPast();
}
DispOn();
InsMode(saveIns);
}
// 1段落を整形
void danraku()
{
int n, num, xwide, delCr;
num = 0;
LEdge();
if(Code() == 0x8140) // 段落の最初が全角スペースなら
{
while(Code() == 0x8140) // 全角スペースの連続数を数える
{
num++;
Right();
}
LEdge();
}
while(1)
{
if(KbHit() == 0x1b) // [ESC]が押されたら中断
break;
GotoX(XWIDE + 1);
if(Tcode() == 1) // 改行
{
Right();
if(Tcode() > 1) // 改行の次が文字なら
{
while(Tcode() > 1) // 不要な改行があれば取り除く
{
if(KbHit() == 0x1b) // [ESC]が押されたら中断
return;
delCr = 1;
Left(); // 行末へ
Left(); // 行末の文字をチェックする
if(Code() == '\\')
{ // 行末に \\ ならそのまま
Left();
if(Code() == '\\')
delCr = 0;
Right();
}
else if(Code() == (int)'」') // 行末に 」ならそのまま
delCr = 0;
Right(); // 行末へ戻る
Right(); // 行頭へ
if(Code() == '\\')
{ // 行頭が \ ならこれと次の改行は取り除かない
REdge();
Right();
delCr = 0;
}
if(delCr == 0)
return;
Bs();
GotoX(XWIDE + 1);
if(Tcode() != 1) // 改行ではないなら
break;
Right();
}
}
else // 整形終了で、カーソル位置は次の段落の先頭へ
{
while(Tcode() == 1)
Right();
break;
}
}
Left();
if(StrChr(Code(), pe) == -1) // 行末禁則文字をチェック
{
Right();
if(StrChr(Code(), ps) != -1) // 行頭禁則文字をチェック
Right();
}
Ret();
if(num > 1) // 行頭を n-1 字分インデント
{
for(n = num; n > 1; n--)
PutChr(0x8140);
}
if(Tcode() == 0) // EOF
break;
}
}
------------------------------------------------------------------