半角部分のみ選択No.30206
cmgm4 さん 11/09/06 21:15
 
こんなことができないかと思いまして・・。

たとえば、

−−−−−−−−−−−
ご紹介します、こちらはMr. Arronです。
私はUnited Computer Inc.で働いています。
−−−−−−−−−−−

という全角と半角の混ざった文章があるときに、Arronの上に
カーソルを載せて、あるマクロを実行すると、"Mr. Arron"全体が
選択される

というマクロです。
自分で作成しなければ勉強にならないんですが・・・。
よろしくお願い致します。

[ ]
RE:30206 半角部分のみ選択No.30207
IKKI さん 11/09/07 01:44
 
cmgm4さん、こんにちは。ユーザの IKKI です。

> という全角と半角の混ざった文章があるときに、Arronの上に
> カーソルを載せて、あるマクロを実行すると、"Mr. Arron"全体が
> 選択される

そういうマクロは作れます。もうちょっと仕様を詰めたいですね。
・全角文字上にカーソルを置いて実行したらどうなるべきか?
・半角カナは全角と同じ扱いか?
などなど。

参考までに、以前作ったサブルーチンを貼っておきます。
# もうちょっとスマートなやり方はないものか…。

SearchUpLongest: // 上検索 (最長一致、カーソル位置を含む)
// 正規表現 $$1 を上へ n 回検索する。
// n - 1 回目の結果を包含しなくなるまで繰り返し、n - 1 回目の結果を返す。
right;
searchup $$1, regular;
if (!result) return false;
while (result && (foundendy > ##dy || (foundendy == ##dy && foundendx >=
##dx))) {
  ##bx = foundtopx;  ##by = foundtopy;  ##dx = foundendx;  ##dy =
foundendy;
  findup;
}
moveto ##dx, ##dy;  beginsel;  moveto ##bx, ##by;  endsel;
return true;

[ ]
RE:30207 半角部分のみ選択No.30209
cmgm4 さん 11/09/07 15:40
 
IKKIさん、こんにちは!

示して頂いたマクロを実行してみたのですが、
検索ボックスダイアログが出てきてしまい、なんだかうまく
動作しないようです。私の方の設定の問題でしょうか??

ご指摘頂いた点ですが、

・全角文字上にカーソルを置いて実行したらどうなるべきか?
→この場合は全角だけの範囲を選択する
・半角カナは全角と同じ扱いか?
→同じ扱い

という希望があります。
なんか丸投げみたいになってしまって大変申し訳ないです。。

[ ]
RE:30209 半角部分のみ選択No.30213
山紫水明 さん 11/09/07 21:35
 
 cmgm4さん,

 IKKIさんが示されたのはサブルーチンですので,単独ではうまくいかないと思
います。
 IKKIさんは高度なテクニックを行使されているようですので,それはそれで期
待するとして,私の方は愚直に考えてみました。

//------------------------------------
if( code >= 0x20 && code <= 0x7e) {
call Select "[。-K\n]";
} else if( code >= 0xa1 ) {
call Select "[ -~\n]";
} else {
message "何もしません。";//改行の上
}
endmacro;

Select:
right;
searchup $$1, regular;
if( result ) right;
else golinetop2;//ファイル先頭行の場合
#bx = x; #by = y;
searchdown $$1, regular;
beginsel;
moveto #bx, #by;
endsel;
return;
//-------------------------------------

                          山紫水明(ユーザー)
                          SANSHISUIMEI

[ ]
RE:30209 半角部分のみ選択No.30214
IKKI さん 11/09/08 02:02
 
cmgm4さん、こんばんは。IKKI です。

ごめんなさい、
> 自分で作成しなければ勉強にならないんですが・・・。

「自分で作成して勉強したいんですが・・・」
と読み違えました。

> ・全角文字上にカーソルを置いて実行したらどうなるべきか?
> →この場合は全角だけの範囲を選択する
> ・半角カナは全角と同じ扱いか?
> →同じ扱い
でしたら、先述のサブルーチンをこんな形で呼び出せば OK だと思います。
# Unicode の扱いは考えていません。

//------------------------------------
if (code >= 0x20) call SearchUpLongest "[ -~]+|[。-゚ -K]+"; // (注)
endmacro;

SearchUpLongest:
right;
searchup $$1, regular;
if (!result) return false;
while (result && (foundendy > ##dy || (foundendy == ##dy && foundendx >=
##dx))) {
  ##bx = foundtopx;  ##by = foundtopy;  ##dx = foundendx;  ##dy =
foundendy;
  findup;
}
moveto ##dx, ##dy;  beginsel;  moveto ##bx, ##by;  endsel;
return true;
//------------------------------------

(注) 「。-゚」は順に半角句点・半角ハイフン・半角半濁点です。フォーラム上では全角
になってしまう…。

[ ]
RE:30214 半角部分のみ選択No.30215
cmgm4 さん 11/09/08 04:54
 
IKKIさん、こんばんわ。
ご親切にありがとうございました。

希望していたことが完璧に出来ました!
感謝です。。

[ ]
RE:30213 半角部分のみ選択No.30216
cmgm4 さん 11/09/08 04:55
 
山紫水明さん

ありがとうございました。
IKKIさんのものとともに、試してみたところ、バッチリ
うまく動きました。ありがとうございました。

にしても、なかなか秀丸、奥が深いですね。。
難しぃーー

ありがとうございました。

[ ]