辞書ファイルを指定して単語補完を試すNo.11412
白雲斎 さん 06/11/29 18:14
 
こんにちは、白雲斎です。
Windows XP, 秀丸エディタ 6.50b2

以下の実験をして見ました。
単語の抽出はどのような基準で抽出されるのだろう?

●HTMLで試す

    1)  以下の4行を記述した辞書ファイルを作成する。
        --------
        abbr
        acronym
        address
        applet
        --------
    2)  単語補完の設定を以下とする。
        単語補完の検索対象:
          ・現在編集中のテキスト    :OFF
          ・辞書ファイル            :(1)で作成したファイル
        詳細:
          ・辞書ファイルの種類      :行単位
          ・追加の検索対象          :なし
          ・大小の区別              :区別しない
          ・優先順位                :標準
          ・単語の種類              :HTML/XML
    3)  適当なHTMLファイルを開く。
    4)  a と入力してAlt + Enterキーを押す。
    5)  4つの候補がリストされる。(期待した動作)
    6)  <a と入力してAlt + Enterキーを押す。
    7)  反応がない。(しばし悩む)
    8)  辞書ファイルを以下のように編集する
        --------
        <abbr
        <acronym
        <address
        <applet
        --------
    9)  <a と入力してAlt + Enterキーを押す。
   10)  4つの候補がリストされる。(期待した動作)
   11)  (8)の辞書が有効ならと、以下の属性を辞書に追加する。
        --------
        action
        align
        alt
        --------
   12)  エレメントの後に a と入力してAlt + Enterキーを押す。
   13)  (11)で追加した3つの候補がリストされる。(期待した動作)

なかなか良い感じと言うことで、

●CSSで試す

    1)  以下の4行を記述した辞書ファイルを作成する。
        --------
        font
        font-family
        font-size
        font-style
        --------
    2)  単語補完の設定は、HTMLと同じ。
    3)  適当なCSSファイルを開く。
    4)  f と入力してAlt + Enterキーを押す。
    5)  4つの候補がリストされる。(期待した動作)
    6)  HTMLの "<element" 形式辞書が有効ならと、以下の4行を辞書に追加す
        る。
        --------------
        :first
        :first-child
        :first-letter
        :first-line
        --------------
    6)  :f と入力してAlt + Enterキーを押す。
    7)  反応がない。


辞書ファイルの作り方が、いまいち理解出来ない…。

[ ]
RE:11412 辞書ファイルを指定して単語補完No.11414
Iranoan さん 06/11/29 19:59
 
 白雲斎さん今日は、Iranoan です。
>     6)  :f と入力してAlt + Enterキーを押す。
 この場合は、単語の一部とならない「:」が含まれているので、「:f」を範
囲選択してから出ないと、単語補完が働かないと思います。

[ ]
RE:11414 辞書ファイルを指定して単語補完No.11418
白雲斎 さん 06/11/29 21:10
 
こんにちは Iranoan さん、白雲斎です。

>>     6)  :f と入力してAlt + Enterキーを押す。
> この場合は、単語の一部とならない「:」が含まれているので、「:f」を範
>囲選択してから出ないと、単語補完が働かないと思います。

はい、これは分かるんですが「HTMLで試す」で登録した "<element" が機能する
ので、ならばCSSもと思い実験しました。
多分、単語の種類が「HTML/XML」の場合は、"<" が特別な意味・処理を行なって
いるのではと想像します。が、そうであるなら下表の関係はどうなのと思ったの
です。
+----------+------+------+
| 登録単語 | 入力 | 候補 |
+----------+------+------+
| element  |  e   |  ○  |
| element  |  <e  |  ×  |←これも候補を表示!?
| <element |  e   |  ×  |
| <element |  <e  |  ○  |
+----------+------+------+
単語の種類が「HTML/XML」の場合は、ダグの補完候補は "<element" 形式で登録
しないといけない決まりがあるなら、それでも良いのですが。
(と言うか、エレメントと属性を切り分けられるので、この方が良いのか)

[ ]
RE:11418 辞書ファイルを指定して単語補完No.11427
秀丸担当 さん 06/11/30 09:24
 

単語の種類が「HTML/XML」の場合は、
<html
<html>
</html>
<xml/>
font-size
といった繋がりも1つの単語として判断しています。
Iranoanさんが別のスレッドでも言われていた &amp; という繋がりできませんが、
これもできるようにしたいところです。
「:」は単語というより区切りだと思うので自動的な単語の繋がりとして判断す
るべきではないと思います。

ただ単に「h」の入力で「html」とならないのはいいのか悪いのかわからないで
すが。
「:f」を範囲選択すればいちおうできますが。
それか「単語の途中も検索」にすれば「f」の入力で、行単位の全体が候補にあ
がります。

辞書が行単位の場合はそういった単語の繋がりは無視して辞書通りに補完できる
のが理想だとは思いますが、どうしてほしいという意見があれば参考にさせてい
ただきます。

[ ]
RE:11427 辞書ファイルを指定して単語補完No.11441
Iranoan さん 06/11/30 13:46
 
 秀丸担当さん今日は、Iranoan です。
> 辞書が行単位の場合はそういった単語の繋がりは無視して辞書通りに補完できる
> のが理想だとは思いますが、どうしてほしいという意見があれば参考にさせてい
> ただきます。
 辞書が行単位の場合は、単語の繋がりは無視すれば良いと思います。その上
で、HTML/XML だけではなく、「ファイルタイプ別の設定」で、単語の一部と
して扱いたい文字を追加できると良いのではないでしょうか?
 ただ「&alpha;&beta;」と書きたいとき、「&alpha;&b」という入力途中で
「&beta;」が補完候補になって欲しいので、「&」「;」は単語の一部であり、
なおかつ単語の区切りとしても働かないと上手く補完が出来ないので、処理が
面倒でしょうね。

[ ]
RE:11441 辞書ファイルを指定して単語補完No.11443
秀丸担当 さん 06/11/30 15:04
 

> 辞書が行単位の場合は、単語の繋がりは無視すれば良いと思います。

理想としてはそうですが、実際に考えると難しいのです。

実際そうしたとして、白雲斎さんの最初の例で「:」と入力して候補に、
    :first
    :first-child
    :first-letter
    :first-line
と出たとします。
続けて「f」と入力すると、この候補から絞り込みが行われるので、「font」は
出てきません。

ところが、最初の一文字として「f」だけを入力すれば、
    font
    font-family
    font-size
    font-style
と出ることになると思います。

また、記号が並んでいる場合、どこまでを自動的に単語として取り込んでいいの
か、辞書ファイルを解析してみないとわかりません。

辞書が「行単位」の場合は、辞書に対してだけは無条件に「単語の途中も検索」
にしてしまえば、ある程度エレガントにはなるかもしれませんが。どうでしょう
か。

あるいは最初の記号一文字だけは特例にするとか。


>その上
>で、HTML/XML だけではなく、「ファイルタイプ別の設定」で、単語の一部と
>して扱いたい文字を追加できると良いのではないでしょうか?
> ただ「&alpha;&beta;」と書きたいとき、「&alpha;&b」という入力途中で
>「&beta;」が補完候補になって欲しいので、「&」「;」は単語の一部であり、
>なおかつ単語の区切りとしても働かないと上手く補完が出来ないので、処理が
>面倒でしょうね。

いちおう現状で<html><body>と繋がっていてもうまいことなるようになっていま
す。
それらを自由に定義できるようにするのは、難しそうです。

[ ]
RE:11443 辞書ファイルを指定して単語補完No.11448
白雲斎 さん 06/11/30 17:27
 
こんにちは 秀丸担当 さん、白雲斎です。

>理想としてはそうですが、実際に考えると難しいのです。

『そうですよね』と言いつつ食い下がるユーザーにお付き合いください。

以下は、取り合えず思いついたアイデアです。
HTMLだとかそうでないとかの考慮はしていないし、まとまった文ではないので流
し読みしてください。

「単語補完の検索対象の詳細」→「詳細」に、単語に含めたい文字を指定する項
目を設けるというアイデアはどうでしょうか?

単語に含めたい文字:
┌─────┐
| &;:      |
└─────┘

これなら単語補完を実行する前に、拡張文字を所得できるので、

・辞書ファイルの読み込みは、「単語に含めたい文字」込みでキャッシュする。

・&a の入力に対して、
 単語の頭を検索(aの左)
    ↓
 行頭でなければ1文字分左の文字所得
    ↓
 「単語に含めたい文字」に合致するか判定
    ↓

[ ]
RE:11443 辞書ファイルを指定して単語補完No.11450
Iranoan さん 06/11/30 17:53
 
 秀丸担当さん今日は、Iranoan です。
> 理想としてはそうですが、実際に考えると難しいのです。
>
> 実際そうしたとして、白雲斎さんの最初の例で「:」と入力して候補に、
>     :first
>     :first-child
>     :first-letter
>     :first-line
> と出たとします。
> 続けて「f」と入力すると、この候補から絞り込みが行われるので、「font」は
> 出てきません。
>
> ところが、最初の一文字として「f」だけを入力すれば、
>     font
>     font-family
>     font-size
>     font-style
> と出ることになると思います。
 辞書が「行単位」でその辞書からの補完はそれで良いと思います。

> 辞書が「行単位」の場合は、辞書に対してだけは無条件に「単語の途中も検索」
> にしてしまえば、ある程度エレガントにはなるかもしれませんが。どうでしょう
> か。
 これが解り易いのではないでしょうか?

 また辞書が行単位でないときや、現在編集中にファイルからの補完は従来通
りで良いと思います。

[ ]
RE:11450 辞書ファイルを指定して単語補完No.11473
秀丸担当 さん 06/12/01 09:42
 

>「単語補完の検索対象の詳細」→「詳細」に、単語に含めたい文字を指定する項
>目を設けるというアイデアはどうでしょうか?

単語の始まりと終わりを明確に区別する必要があって、定義する方法が難解にな
りそうです。
またそれらを全て理解して、辞書ファイルを作るというのもハードルが高そうで
す。

深いことを考えず簡単にできるようにしたいです。
辞書ファイルをいちいち作らなくても補完できたり、
辞書ファイルを行単位にすれば記述方法を深く考えることなく補完できたらいい
かなと。

>> ところが、最初の一文字として「f」だけを入力すれば、
>>     font
>>     font-family
>>     font-size
>>     font-style
>> と出ることになると思います。
> 辞書が「行単位」でその辞書からの補完はそれで良いと思います。

ルール通りではありますが、望むものではないと思います。

>> 辞書が「行単位」の場合は、辞書に対してだけは無条件に「単語の途中も検索」
>> にしてしまえば、ある程度エレガントにはなるかもしれませんが。どうでしょう
>> か。
> これが解り易いのではないでしょうか?

とりあえず手元のものでやってみて、多少遅くなりますがこの方法がなんだかよ
さそうなので、この方法にしてみようと思います。

[ ]
RE:11473 辞書ファイルを指定して単語補完No.11482
Iranoan さん 06/12/01 11:58
 
 秀丸担当さん今日は、Iranoan です。
> >「単語補完の検索対象の詳細」→「詳細」に、単語に含めたい文字を指定する項
> >目を設けるというアイデアはどうでしょうか?
>
> 単語の始まりと終わりを明確に区別する必要があって、定義する方法が難解にな
> りそうです。
> またそれらを全て理解して、辞書ファイルを作るというのもハードルが高そうで
> す。
 これは辞書が「行単位」の時の話ではないでしょうか? 定義や辞書作りが面
倒になることではないと思います。
 その上で、
> 「単語補完の検索対象の詳細」→「詳細」に、単語に含めたい文字を指定する
とは、「単語に含めたい文字」に「<&」があれば、HTML で「<im」を補完する
時、image などは補完候補とせず、前方方向の「<」までは単語の一部とみな
し、辞書に登録のある「<img src="」などを補完候補とするということだと思
います。
 これなら、「&alpha;」や TeX の「\alpha」の補完が可能になります。

[ ]
RE:11482 辞書ファイルを指定して単語補完No.11493
秀丸担当 さん 06/12/01 14:09
 

> これは辞書が「行単位」の時の話ではないでしょうか? 定義や辞書作りが面
>倒になることではないと思います。
> その上で、
>> 「単語補完の検索対象の詳細」→「詳細」に、単語に含めたい文字を指定する
>とは、「単語に含めたい文字」に「<&」があれば、HTML で「<im」を補完する
>時、image などは補完候補とせず、前方方向の「<」までは単語の一部とみな
>し、辞書に登録のある「<img src="」などを補完候補とするということだと思
>います。
> これなら、「&alpha;」や TeX の「\alpha」の補完が可能になります。

行単位の話ですし、「<&」とだけ定義すればいいような話でもないです。
とまた説明すると長くなるので省略しますが。
定義するには単語の先頭「<&」、単語の補完部分「a-z_/」、単語の終わり
「>;」とかそんな感じの定義が必要だと思います。
仮に「<&」とだけ定義すればいいにしても、ハードルは高いことには変わりない
と思います。
辞書は行単位の場合は必ず「単語の途中も検索」にしてみます。

[ ]
RE:11493 辞書ファイルを指定して単語補完No.11511
Iranoan さん 06/12/01 18:33
 
 秀丸担当さん今日は、Iranoan です。
> > ・辞書を「行単位」にすると辞書に対しては必ず「単語の途中も検索」となるよ
>うに
> > 変更。
 取り敢えず、この動作を試したのですが、ありがたみが有りません(;_;)。
辞書に
\alpha
amsmath
と有ったとき \a で補完をした時は、先頭に「\」を書いているので、\alpha
だけが補完対象になって欲しいのですが、amsmath も補完対象になります。そ
れに加えて、実際に補完すると \\alpha になってしまいます。

 実現可能かどうかはお任せしますが、取り敢えず前回の投稿までで言いた
かったことをまとめておきます。
・辞書が「行単位」の時は、一行丸ごとを単語のように扱い補完候補とする
・SGML 系の & や TeX の \ の様に、そこまで戻って単語の先頭と見なす文字
  を指定できると良い
  つまり検索に例えると、補完候補を探すために、まず
  searchup "\<[A-Z]+", regular, nocasesense;
  でマッチする文字列に近い探索をすると思いますが、単語の先頭と見なす文
  字 $s が指定してあれば、
  searchup $s + "[A-Z]+", regular, nocasesense;
  で補完候補の元になる文字列を検索してくれれば便利ということです。

 もちろんこれは、範囲選択してから「単語補完」を実行すれば出来ることで
すが、SGML 系や TeX だけでなく、秀丸のマクロ等指定を工夫すれば、色々効
用が広がると思うのです。

[ ]
RE:11511 辞書ファイルを指定して単語補完No.11528
秀丸担当 さん 06/12/04 09:45
 

> 取り敢えず、この動作を試したのですが、ありがたみが有りません(;_;)。
>辞書に
>\alpha
>amsmath
>と有ったとき \a で補完をした時は、先頭に「\」を書いているので、\alpha
>だけが補完対象になって欲しいのですが、amsmath も補完対象になります。そ
>れに加えて、実際に補完すると \\alpha になってしまいます。

amsmathも対象となるのはある程度仕方ないかと思いますが、\\alphaになってし
まうのは意味無いですね。
もう少し考えます。

> 実現可能かどうかはお任せしますが、取り敢えず前回の投稿までで言いた
>かったことをまとめておきます。
>・辞書が「行単位」の時は、一行丸ごとを単語のように扱い補完候補とする
>・SGML 系の & や TeX の \ の様に、そこまで戻って単語の先頭と見なす文字
>  を指定できると良い
>  つまり検索に例えると、補完候補を探すために、まず
>  searchup "\<[A-Z]+", regular, nocasesense;
>  でマッチする文字列に近い探索をすると思いますが、単語の先頭と見なす文
>  字 $s が指定してあれば、
>  searchup $s + "[A-Z]+", regular, nocasesense;
>  で補完候補の元になる文字列を検索してくれれば便利ということです。
>
> もちろんこれは、範囲選択してから「単語補完」を実行すれば出来ることで
>すが、SGML 系や TeX だけでなく、秀丸のマクロ等指定を工夫すれば、色々効
>用が広がると思うのです。

自動起動マクロで単語補完前に範囲選択するものがあればいろいろ応用が利きそ
うです。

[ ]
RE:11528 辞書ファイルを指定して単語補完No.11541
Iranoan さん 06/12/04 13:25
 
 秀丸担当さん今日は、Iranoan です。
> amsmathも対象となるのはある程度仕方ないかと思いますが、\\alphaになってし
> まうのは意味無いですね。
> もう少し考えます。
<snip>
> 自動起動マクロで単語補完前に範囲選択するものがあればいろいろ応用が利きそ
> うです。
 ある程度はマクロになっても仕方がないでしょうね。
 マクロではなく設定で「単語補完」の元となる文字列の取り込み時点で、単
語の一部と見なす文字を設定できれば、敷居は低くなるのでしょうが...。

[ ]
RE:11528 辞書ファイルを指定して単語補完No.11543
Iranoan さん 06/12/04 13:49
 
 秀丸担当さん今日は、Iranoan です。
> 自動起動マクロで単語補完前に範囲選択するものがあればいろいろ応用が利きそ
> うです。
 他に使っているマクロの関係で知りたいのですが、「単語補完」は
#tmp = sendmessage( hidemaruhandle( 0 ), 0x0111, 386, 0 );
も使えませんが、これはリスト・ボックスを出すなどの理由で使えないので
しょうか? それとも、wParam が違いますか?

[ ]
RE:11543 辞書ファイルを指定して単語補完No.11546
秀丸担当 さん 06/12/04 15:05
 


> ある程度はマクロになっても仕方がないでしょうね。
> マクロではなく設定で「単語補完」の元となる文字列の取り込み時点で、単
>語の一部と見なす文字を設定できれば、敷居は低くなるのでしょうが...。

自動起動マクロは可能性としてネタとしておくとして、秀丸エディタの機能とし
ては深いことを考えずに補完できるようにしたいです。
またころころ変わってなんですが、β4では条件によって補完開始する位置より
前方が一致していも大丈夫なように、手動の場合は記号でもできるようにしてみ
ようと思います。

> 他に使っているマクロの関係で知りたいのですが、「単語補完」は
>#tmp = sendmessage( hidemaruhandle( 0 ), 0x0111, 386, 0 );
>も使えませんが、これはリスト・ボックスを出すなどの理由で使えないので
>しょうか? それとも、wParam が違いますか?

wParamは間違ってはいないですが、マクロ実行中はいまのところできないことに
なっています。
単語補完を出すマクロ文も用意したいところです。

[ ]
RE:11546 辞書ファイルを指定して単語補完No.11552
Iranoan さん 06/12/04 16:39
 
 秀丸担当さん今日は、Iranoan です。
> 自動起動マクロは可能性としてネタとしておくとして、秀丸エディタの機能とし
> ては深いことを考えずに補完できるようにしたいです。
> またころころ変わってなんですが、β4では条件によって補完開始する位置より
> 前方が一致していも大丈夫なように、手動の場合は記号でもできるようにしてみ
> ようと思います。
 私個人は、マクロの文が用意されたら、好きなように手を加えると思います
が、より多くの彼我がマクロを使わずに出来た方が便利でしょうから、β4 を
使ってみてから改めて書き込ませて頂きます。

> >#tmp = sendmessage( hidemaruhandle( 0 ), 0x0111, 386, 0 );
<snip>
> wParamは間違ってはいないですが、マクロ実行中はいまのところできないことに
> なっています。
 単なる確認ですが、これは上記の一行マクロでも駄目ということですよね。
 あくまで不都合がなければですが、出来るようにしておいて頂けると助かり
ます。

[ ]
RE:11552 辞書ファイルを指定して単語補完No.11556
秀丸担当 さん 06/12/04 18:27
 

> 単なる確認ですが、これは上記の一行マクロでも駄目ということですよね。
> あくまで不都合がなければですが、出来るようにしておいて頂けると助かり
>ます。

sendmessageでもできないと思います。
通常のコマンドでは非同期なので、単純にsendmessageでできるようにするとい
うわけにもいかないです。専用のマクロ文を作ったほうがよさそうです。

[ ]
RE:11556 辞書ファイルを指定して単語補完No.11557
Iranoan さん 06/12/04 19:01
 
 秀丸担当さん今日は、Iranoan です。
> 通常のコマンドでは非同期なので、単純にsendmessageでできるようにするとい
> うわけにもいかないです。専用のマクロ文を作ったほうがよさそうです。
 よろしくお願いします。

 実際にβ4 を使ってみての感想は、
> ・補完する場所よる前方が一致していても補完する。
が該当する変更だと思うのですが、辞書に
amsmath
\alpha
と有ったとき、\a の補完候補としては、\alpha だけの方が使いやすいと思い
ます。つまり「``カーソル位置の単語+もう一つ前方の記号'' で補完候補とな
る文字列が、(行単位の) 辞書にあれば、そちらだけ候補とする」という動き
です。      ~~~~~~~~~~~~~~~~~~~~~~~

[ ]
RE:11557 辞書ファイルを指定して単語補完No.11563
秀丸担当 さん 06/12/05 09:22
 

>と有ったとき、\a の補完候補としては、\alpha だけの方が使いやすいと思い
>ます。つまり「``カーソル位置の単語+もう一つ前方の記号'' で補完候補とな
>る文字列が、(行単位の) 辞書にあれば、そちらだけ候補とする」という動き
>です。      ~~~~~~~~~~~~~~~~~~~~~~~

それはまあそうですが、とりあえず辞書を適当に作れば適当に候補が出て補完で
きるようになったのではないかと思います。
これで辞書を作ったのに候補に出てこなくてなんでなのかわからないというよう
なことは無くなると思います。

単語の種類をカスタマイズできるようにしたり、自動起動マクロできるようにし
たりという機能は、作るにせよ作らないにせよ後から考えてもいいです。
汎用的な基本機能としてはこれでいいんじゃないかと思います。

[ ]
RE:11563 辞書ファイルを指定して単語補完No.11570
Iranoan さん 06/12/05 16:13
 
 秀丸担当さん今日は、Iranoan です。
> 単語の種類をカスタマイズできるようにしたり、自動起動マクロできるようにし
> たりという機能は、作るにせよ作らないにせよ後から考えてもいいです。
> 汎用的な基本機能としてはこれでいいんじゃないかと思います。
 元々β4 に対しては感想なので、それで構いません。

[ ]