‘単語選択’の単語区切り基準No.01069
ぷはぁ〜 さん 98/05/22 15:07
 
  こんにちわ。
  ダブルクリックでの単語選択についての質問(要望)です。

現状
    漢字・カナ混じりの単語を、ダブルクリックで選択しよう
  としても漢字・カナ(アルファベット)で、分離されて選択
  されてしまう。  


要望
    ダブルクリックで選択された単語選択を変更せずに、続け
  て選択範囲上でダブルクリックされた場合・・・・

    1回目・・・
      区切りを半角全角の空白・カンマ・セミコロン・コロン
      ・ピリオド等に選択範囲を広げる。

    2回目・・・
      区切りを半角全角の空白・カンマ・セミコロン・コロン
      と、区切り記号を少なくして、選択範囲を広げる。

    3回目・・・
      行選択

    で、この1・2回目の単語区切り記号を設定リスト毎に指
  定できると最高なんですが・・・・
   

[ ]
RE:01069 ‘単語選択’の単語区切り基準No.01077
秀丸担当 さん 98/05/22 16:25
 
>要望
>    ダブルクリックで選択された単語選択を変更せずに、続け
>  て選択範囲上でダブルクリックされた場合・・・・
>
>    1回目・・・
>      区切りを半角全角の空白・カンマ・セミコロン・コロン
>      ・ピリオド等に選択範囲を広げる。
>
>    2回目・・・
>      区切りを半角全角の空白・カンマ・セミコロン・コロン
>      と、区切り記号を少なくして、選択範囲を広げる。
>
>    3回目・・・
>      行選択

うーむ、ちなみに今の仕様では、
ダブルクリックの、2回目のクリックを押しっぱなしにしてドラッグすると、
単語単位で範囲選択を広げることができます。

ちょっとわかりづらいかもしれませんが、
マウスのボタンを押して、離して、押して、の段階で押しっぱなしで、マウス
を移動です。
どないなもんでしょうか?

[ ]
RE:01077 ‘単語選択’の単語区切り基準No.01080
ぷはぁ〜 さん 98/05/22 21:29
 
>
>うーむ、ちなみに今の仕様では、
>ダブルクリックの、2回目のクリックを押しっぱなしにしてドラッグ
>すると、単語単位で範囲選択を広げることができます。
>
>ちょっとわかりづらいかもしれませんが、
>マウスのボタンを押して、離して、押して、の段階で押しっぱなしで、
>マウスを移動です。
>どないなもんでしょうか?
>
  これは気が付いていたんですが、
    1、不器用なので‘移動’をヤッテしまいがち。
    2、‘漢字カンジ漢字 ’のような単語で、‘カンジ’を最初に選
      択してしまった場合に・・・・
  といった感じで私にはチョット相性が悪いです。


   あ、GREPでのダウンに比べたら全然・要望優先順位は低いです。

[ ]
RE:01080 ‘単語選択’の単語区切り基準No.01082
noro さん 98/05/25 12:51
 
ぷはぁ〜さんこんにちは(^^) noro です。
 少々動作が鈍くさい感じですが、以下のマクロで、単語単位で選択範囲を広
げたり縮めたりできると思います。ただ、単語の区切りとして認識する文字が
変わるわけじゃないので、これでいいのかなぁ?って感じですけど(^^;)
 もし良かったら、試してみて下さい(^^)

−−−−−−−−−−−−キリトリセン−−−−−−−−−−−−−−
if ( ! selecting ) {
  selectword;
}

loop:
  menu "( &A ) 左の単語も選択に入れる",
       "( &Z ) 左の単語を選択から外す",
       "( &D ) 左の単語も選択に入れる",
       "( &C ) 左の単語を選択から外す",
       "(& スペース )終了";

  if ( result == 1 ) call left seltopx,seltopy,selendx,selendy;
  else if ( result == 2 ) call right seltopx,seltopy,selendx,selendy;
  else if ( result == 3 ) call right selendx,selendy,seltopx,seltopy;
  else if ( result == 4 ) call left selendx,selendy,seltopx,seltopy;
  else if ( result == 5 || result == 0 ) endmacro;
goto loop;

left:
  moveto ##1-1,##2;
  gowordtop;
  beginsel;
  moveto ##3,##4;
return;

right:
  moveto ##1,##2;
  gowordend;
  beginsel;
  moveto ##3,##4;
return;
−−−−−−−−−−−−キリトリセン−−−−−−−−−−−−−−
ではでは…

[ ]
RE:01082 ‘単語選択’の単語区切り基準No.01083
ぷはぁ〜 さん 98/05/25 14:39
 

>ぷはぁ〜さんこんにちは(^^) noro です。
> 少々動作が鈍くさい感じですが、以下のマクロで、単語単位で選択範囲を広
>げたり縮めたりできると思います。ただ、単語の区切りとして認識する文字が
>変わるわけじゃないので、これでいいのかなぁ?って感じですけど(^^;)
> もし良かったら、試してみて下さい(^^)
>
  ありがとうございます。
  メニューの下2つを「右の・・・」 に変更させていただいて、キー割り当て
で、トリプルクリックに割り当ててみたら、なかなか良いようです。

  フリー罫線マクロ(寺脇勝彦さん作)以来の感動です。
  横着して人に頼ってばかりじゃなく 、自分でもマクロを作ってみようかなっ
て気になりました。


> 少々動作が鈍くさい感じですが・・・
>
  自宅のパソコンはK6−233/128MBですが、会社の私専用のパソコ
ンは、P2−333/128MBですので、動作の鈍さは全然気になりません。

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


[ ]
RE:01083 ‘単語選択’の単語区切り基準No.01084
番頭++ さん 98/05/25 18:13
 
フレーズ選択の処理ですが、テストしてみてはいかがですか ...

    $str_find = "[^,\\.;:、。\\t]*[,\\.;:、。\\t]";
    searchdown $str_find, regular;

正規表現を使って検索をしています。が、正規表現のことを聞かれても、
あんまし詳しくないこのマクロの作者です。

//  test1.mac フレーズ選択
    $searchbuffer = searchbuffer;   #searchoption = searchoption;
    #sw_sel = selecting;    //  範囲選択
    #selectfound = getininum("hidemaru.ini","Env","SelectFound");
    if( ! #selectfound ){
        writeininum "hidemaru.ini", "Env","SelectFound", 1;
        envchanged;
    }
    if( #sw_sel ){
        #x_s = seltopx; #y_s = seltopy; #x_e = selendx; #y_e = selendy;
        escape; moveto #x_e, #y_e;  left;
    } else {
        #x_s = x;   #y_s = y;   left;
    }
    $str_find = "[^,\\.;:、。\\t]*[,\\.;:、。\\t]";
    searchdown $str_find, regular;
    if( ! result ){
        escape; // ???
    } else {
        right;  #code = code;
    }
    beginsel;
    moveto #x_s, #y_s;
    setsearch $searchbuffer, #searchoption;
    if( ! #selectfound ){
        writeininum "hidemaru.ini", "Env", "SelectFound", 0;
        envchanged;
    }
//R if( #code == 0x0D ){    escape; }
endmacro;

[ ]
RE:01084 ‘単語選択’の単語区切り基準No.01085
ぷはぁ〜 さん 98/05/26 09:37
 

>フレーズ選択の処理ですが、テストしてみてはいかがですか ...
>   :
>正規表現を使って検索をしています。が、正規表現のことを聞かれても、
>あんまし詳しくないこのマクロの作者です。
>   :
>
  ありがとうございます。
  私の‘ワガママ’なんぞに、複数の方々から具体的なマクロを掲示
されると、恐縮してしまいます。

  検索機能を使うというのは、考えませんでした。
  全角文字の2バイト目判定や、将来のシフトJIS以外の対応を考える
と、カーソル位置を移動して‘code’で判定と安直な考えしかできません
でした。

  で、人によって使い方は様々と思いますが、私が何を編集目的としてい
たかと言いますと、ORACLEのスクリプト(SQL文)です。
  最近の流行で、項目名・表名・ビュー名・プロシジャ名…等に日本語を
使用することが多くなりまして、あんなグチをこぼしてしまいました。


  で、昨晩自分で作ってみたマクロです。
   OS/2 v1.21用の秀丸エディタを使い始めて?年、初めて作ったマクロ
です。
   4004のマシン語を打ち込んだ時のような胸の高鳴りを覚えました。

  あとは、区切り文字をテキストファイル(INIやレジストリじゃなくて)で
定義出来れば完成なんですが・・・・
  (INIやレジストリじゃないと言うのは環境のバックアップを容易にしたい
からで、キャッシュ的に使うと思いますが・・・??)

−−−−−−−−−−−−− キリトリセン −−−−−−−−−−−−−
// ────────────────────────────────
//  秀丸エディタ用「拡張単語選択マクロ」
//                                         by  ぷはぁ〜  1998.5.26
// ────────────────────────────────
//
//   全角漢字・かな・半角文字等を、同一に扱い、単語選択します。
//
//  コード体系は、Sifit-JISしか考えていません。
//
//                           ぷはぁ〜:xxxxxxxx@nifty.ne.jp(奥野)
// ────────────────────────────────
//    尚、本マクロ作成にあたっては、秀ネット)noro さんのマクロが
//  キッカケとなり、引用させていただき作成しました。
//    あらためて御礼申し上げます。
// ────────────────────────────────
//
  call setcharisbreak;                // ‘語’を構成する文字コードテーブル
作成

  disableinvert;                      // 範囲選択のときの反転表示を禁止
  if (selecting) {                    // 現在選択状態なら取り消す
     escape;
     moveto seltopx, seltopy;
     right;
     }
  call quecharisbreak code;           // 語の無い位置ならRET.
  if (##return)  goto letsendmacro;

  while( x > 0 ) {                    // 左位置サーチ
    call quecharisbreak code;
    if (##return) {
       right;                         // 現在の位置は区切り文字なので、1文
字戻す
       break;
    }
    left;                             //‘語’構成文字
  }
  ##tmpseltopx = x;
  ##tmpseltopy = y;

  while( x < linelen2 ) {             // 右位置サーチ
    call quecharisbreak code;
    if (##return) {
       break;                         // 選択範囲用に一文字右の位置
    }
    right;  //‘語’構成文字
  }
  ##tmpselendx = x;
  ##tmpselendy = y;
  call hiperselect ##tmpseltopx, ##tmpseltopy, ##tmpselendx, ##tmpselendy;

  letsendmacro:                       // ----- 帰還窓口
  enableinvert;                       // 範囲選択のときの反転表示を禁止-解除
  endmacro;


//───────────────────────────────────
//  語を選択
//
hiperselect:
  moveto ##1, ##2;
  beginsel;
  moveto ##3, ##4;
  return;

//───────────────────────────────────
//   ##1      1文字の数値  比較検査文字
//   ##return  判定結果  0:単語構成文字  1:区切り文字
//
quecharisbreak:
  ##isresult = 1;
  ##loopi = #nonbreakcharmin;
  while(##loopi <= #nonbreakcharmax) {
     if (#nonbreakchar[##loopi][0] <= ##1) {
        if (##1 <= #nonbreakchar[##loopi][1]) {
           ##isresult = 0;
        }
     }
     ##loopi = ##loopi + 1;
  }
  return ##isresult;

//───────────────────────────────────
// ‘語’を構成する文字コードテーブル
//   #nonbreakchar[ ・・・min 〜 …max ][ 0 〜 1 ] が‘語’を構成する文字
//
setcharisbreak:
  #nonbreakcharmin = 0;       // 配列の最小値
  #nonbreakcharmax = 6;       // 配列の最大値
  #nonbreakchar[0][0] = ascii("0");   // 数字       ┐  このテーブルは、
  #nonbreakchar[0][1] = ascii("9");   //            │EBCDICの様な不連続
  #nonbreakchar[1][0] = ascii("A");   // 英大文字   │なコード体系では使
  #nonbreakchar[1][1] = ascii("Z");   //            │えない。
  #nonbreakchar[2][0] = ascii("a");   // 英小文字   │
  #nonbreakchar[2][1] = ascii("z");   //            ┘
  #nonbreakchar[3][0] = ascii("_");   // アンダスコア…文字と同じ扱いが多い
  #nonbreakchar[3][1] = ascii("_");   //
  #nonbreakchar[4][0] = ascii(".");   // ピリオド………小数点等同一語内が多

  #nonbreakchar[4][1] = ascii(".");   //     なら -> はどうする? A:私はC+
+よりORACLEを優先
  #nonbreakchar[5][0] = 0x80;         // 深く考えずに半角カナ周辺は文字とし
ている
  #nonbreakchar[5][1] = 0xFF;         //
  #nonbreakchar[6][0] = 0x0100;       // 全角文字は全て文字・・・でいいか
な?
  #nonbreakchar[6][1] = 0xFFFF;       //
  return;

//───────────────────────────────────
−−−−−−−−−−−−− キリトリセン −−−−−−−−−−−−−

[ ]
RE:01085 ‘単語選択’の単語区切り基準No.01086
番頭++ さん 98/05/26 11:10
 
>私が何を編集目的としてい
>たかと言いますと、ORACLEのスクリプト(SQL文)です。
>  最近の流行で、項目名・表名・ビュー名・プロシジャ名…等に日本語を

ORACLE SQL のマニュアルが無いので、テーブル名、変数名の仕様がハッキリし
ませんが、文字列の制限が解りませんが ...

「動作環境」の「ユーザインターフェイス」の「検索での表示」を選択するにし
て、これらのマクロを実行してみてください。後で元に戻してください ...

$str_find = "
[ <== キャラクタクラス始まり
_. <== SQL では文字を繋ぐコネクタ、のはずです
0-9A-Za-zぁ-んァ-ヶ亜-K <== こんな文字列の組み合わせ
]  <== キャラクタクラス終わり
+ <== 一文字以上の繰り返し
";

を検索します。そのあと [→] 、その後下方検索。 [→] です。

//test3.macテーブル名、変数名の検索
$str_find = "[_.0-9A-Za-zぁ-んァ-ヶ亜-K]+"; // 半角カタカナはだめ !
searchdown $str_find, regular;
endmacro;


//test3.mac 'リテラル'の検索 'test don''t' <== テストデータ
$str_find = "'(''|[^'\\t])*'";// これはマクロの文法ですからだめです
searchdown $str_find, regular;
endmacro;

メニュー、検索の「正規表現」でも出来ます。

「秀丸エディタ」の正規表現の文字数制限 (???) 内であれば、すべて検索で
 SQL スクリプトの選択はできます。



[ ]
RE:01086 ‘単語選択’の単語区切り基準No.01088
ぷはぁ〜 さん 98/05/26 15:58
 

>>私が何を編集目的としてい
>>たかと言いますと、ORACLEのスクリプト(SQL文)です。
>>  最近の流行で、項目名・表名・ビュー名・プロシジャ名…等に日本語を
>
>ORACLE SQL のマニュアルが無いので、テーブル名、変数名の仕様がハッキリし
>ませんが、文字列の制限が解りませんが ...
>
  あ、すみません。  発言内容とタイミング(RES先)が悪かったようです。
   >>私が何を編集目的としてい・・・は、最初の私自身の発言(単語選択の区
切り文字について・・・)と何故希望したかという補足説明のつもりで書いた
つもりでして、番頭++さんのRESマクロに対して‘イチャモン’付けた訳で
はありませんので.....言葉足らずですみません。

  私も、秀丸エディタをSQL以外に使うことが多く、単語区切りもそんなに
シビアに考えているのではなく‘とりあえず’‘そのうちにだんだんと…’と
軽い気持ちです。


  で、本題。
  searchdown のヘルプを見ただけでは良く分かりませんでしたが、具体的に
掲示されたマクロを見せていただくと‘そんな使い方ができるのか’と、マク
ロに対する思いを新たにさせられますね。

  今頃・・ですが、今まで考えていなかった「正規表現」「あいまい検索」
の違いが、番頭++さんのRESで分かりました。

[ ]
RE:01083 ‘単語選択’の単語区切り基準No.01089
noro さん 98/05/26 16:54
 
ぷはぁ〜さんこんにちは(^^)noroです。

》  メニューの下2つを「右の・・・」 に変更させていただいて、キー割り当て
》で、トリプルクリックに割り当ててみたら、なかなか良いようです。

 ううむ…右も左も分からん奴になってしまいましたσ(^-^;)
 お役に立ったようで何よりです(^^)


[ ]
RE:01088 ‘単語選択’の単語区切り基準No.01090
番頭++ さん 98/05/26 17:35
 
別にイカッテはいませんです。イチャモンとか、とも思っていません。

あちきが、早トチリをして、文章中の処理だと、思って一度目のマクロを書いて
みました。文章を区切ることを想像しました。すると、区切文字を探すことにな
ります。

で、今朝、来ると「 SQL の ... 」ですから、二度目のマクロは、文字列を連結
することを、意識しました。

SQL < ... 識別子> (変数名) の検索だと、思って、「正規表現」の検索をコー
ドしました、です。

ところが、Oracle の <漢字識別子> とか <漢字列表現> が解らないので、「こ
れ以上はコードできません。」と言う意味です。そこいらは、メーカーさん「処
理系作成者 ??? 」独特ですから、これ以上は解りません、と言う意味合いでし
た。

とてつもなく、本題から遠くに来てますね。。。

個人の文章を処理するにはその人の癖をコードする必要があります、そんな気が
します ...

[ ]
RE:01089 ‘単語選択’の単語区切り基準No.01094
ぷはぁ〜 さん 98/05/26 19:35
 

  noroさん、こんばんわ
>
>》  メニューの下2つを「右の・・・」 に変更させていただいて、キー割り当て
>》で、トリプルクリックに割り当ててみたら、なかなか良いようです。
>
> ううむ…右も左も分からん奴になってしまいましたσ(^-^;)
> お役に立ったようで何よりです(^^)
>
  自己RES的に言いますと、結局ダブルクリックに割り当ててます。

   あと、ワガママは尽きないもので、
   1、Unicode/EUCコードにも対応させたいなぁ・・・・
   2、設定リスト/コード系毎に区切り文字を指定可能にしたいなぁ・・・
・・・・・って。
 

[ ]