◀一般トップへ
  • 2620 1.3.5.8~1.3.6.1 強調表示異常
    • 2629 Re: 1.3.5.8~1.3.6.1 強調表示異常
      • 2630 Re2: 1.3.5.8~1.3.6.1 強調表示異常
        • 2635 Re3: 1.3.5.8~1.3.6.1 強調表示異常
  • [2620] 1.3.5.8~1.3.6.1 強調表示異常 すい 2002年12月17日 20:01

    強調キーワードが一部、強調表示されないみたいです。

    1. エディタを全終了状態にて sakura.ini を削除する。

    2. http://www.egroups.co.jp/files/sakura-editor/User/Data/
      から S_macppa_20021217_04.LZH をダウンロードして、中の S_MAC.KWD を適当に
      強調キーワードとして設定する。「キーワードの英大文字小文字区別(C)」は
      チェック off で。タイプ別設定も適当におこなって強調表示できるタイプを作成する。

    3. ↑の S_MAC.KWD をエディタで開いて、タイプ別設定一覧から S_MAC.KWD の内容を
      強調キーワードとして設定したタイプを [一時適用] してみる。

    すると、ほとんどの物は強調表示されますが、
    ・S_F_WndScrollDown
    ・S_F_WndScrollUp
    の2個は強調表示になりません。

    同様の事を HSP.KWD でやって見ると、
    ・mousex
    ・mousey
    ・alloc
    ・addbg
    ・addbox
    ・addmesh
    ・addplate
    ・addspr
    ・getbg
    ・...
    他、諸々の物が強調表示になりません。 (;_;)

    強調キーワードの設定をおこなう時に「キーワードの英大文字小文字区別(C)」に
    チェックすれば発生しないようです。

    先祖帰りしてみると
     ○ 1.3.5.7
     × 1.3.5.8
     × 1.3.6.0
     × 1.3.6.1
    どうも 1.3.5.8 から おかしいみたいです。
    • [2629] Re: 1.3.5.8~1.3.6.1 強調表示異常 もか 2002年12月23日 23:43

      ▼ すい
      >強調キーワードが一部、強調表示されないみたいです。
      (中略)...
      >強調キーワードの設定をおこなう時に「キーワードの英大文字小文字区別(C)」に
      >チェックすれば発生しないようです。
      調査、報告ご苦労様です。

      原因が掴めたので報告します。
      (内容からすると開発掲示板向きですが、報告ついでに書いておきます。
      また、すでに他の方が修正していた場合はごめんなさい。)

      強調キーワードの
      クイックソートはコンパイラに付属のstricmpが使われ、
      バイナリーサーチはstrnicmpですが、my_icmp.cpp/hのmy_strnicmpに置き換えられます。
      VCの場合、コンパイラ付属のstricmpは「小文字として」比較しますが、my_icmpは「大文字として」比較するため、サーチに失敗するということです。
      BCCの場合はコンパイラ付属のstricmpが「大文字として」比較するため、このバグによる影響は受けないはずです。

      以下のどちらかでの修正で直ると思います。
      修正お願いします。>げんたさん
      * my_icmp.h 側を修正する場合
      [71行目以下]
      -#define memicmp(a,b,c) my_memicmp((a),(b),(c))
      +#define memicmp my_memicmp
      以下同様に変更

      * CKeyWordSetMgr.cpp 側を修正する場合
      [301行目以下]
      qsort( 省略,,,
      - (int (__cdecl *)(const void *, const void *))stricmp
      + (int (__cdecl *)(const void *, const void *))my_stricmp
      • [2630] Re2: 1.3.5.8~1.3.6.1 強調表示異常 すい 2002年12月24日 02:38

        >クイックソートはコンパイラに付属のstricmpが使われ、
        >バイナリーサーチはstrnicmpですが、my_icmp.cpp/hのmy_strnicmpに置き換えられます。
        >VCの場合、コンパイラ付属のstricmpは「小文字として」比較しますが、my_icmpは「大文字として」比較するため、サーチに失敗するということです。
        >BCCの場合はコンパイラ付属のstricmpが「大文字として」比較するため、このバグによる影響は受けないはずです。

        つまりライブラリの微妙な仕様の差のせい?
        英大文字と英小文字の間のコードのアンダースコア(下線)だとかが
        アルファベットの前に並べられる場所と、後ろであると判定される場所
        があって、、、というお話しですか。

        そう言えばキーワード一覧からの検索部分はキーワードセットの中央から比較して
        str?cmp の返値の大小を使ってキーワードセットの前方へ調査していくか後方へ
        調査していくか決定して、それを繰り返して探していく構造ですね。
        あらかじめキーワードの一覧をソートしておく時の並び順ルールと、検索時、
        ソート済みのキーワードの一覧をたどるための大小判定のルールが異なっている
        となれば確かに。
        って事は強調表示されるかどうかは、下線を使ったキーワードがあるかどうかと
        登録されているキーワード数の影響を受けるわけだ。
        確かに HSPのキーワードから _ で始まるキーワードを1個削除してみたら
        alloc も強調表示されるようになりますね。

        1.3.5.7 ⇒ 1.3.5.8 の変更箇所見ていても変になりそうな所、無いよな~~
        とか思ってたんですけど。見つからないわけです。
        よく見つけられましたねぇ。
        これ、見つけるのにだいぶ時間かかったのでは?ご苦労様です。

        ちょっと嫌すぎますね、このバグ。

        いっそのこと、str??cmp とかは全部 my_str??cmp に置換して明示的に
        揃えちゃった方が後々のためにも良いのかもしれませんね。
        あんまりこの手の事をやっている所って無さそうな気がしますけど。
        普通あんまり str??cmp の大小って見ないもんな~~。大抵は一致しているかどうかだけで。
        • [2635] Re3: 1.3.5.8~1.3.6.1 強調表示異常 もか 2002年12月24日 18:30

          ▼ すいさん
          >つまりライブラリの微妙な仕様の差のせい?
          そういうことです。

          >いっそのこと、str??cmp とかは全部 my_str??cmp に置換して明示的に
          >揃えちゃった方が後々のためにも良いのかもしれませんね。
          賛成です。ただし、将来のUnicode対応を考慮してmy_tchar.hを作成した上
          使う側では、my_tchar.hをインクルードしてstr??cmp my_tcs??cmpにする
          というようにしませんか?

          詳しくは開発板へ書きます。

          #2629の記事で呼び捨てにしていました。すいさん、ごめんなさい