◀ANSI版開発トップへ
  • 4079 色分けの優先順位
    • 4081 RE: 色分けの優先順位
      • 4083 Re2: 色分けの優先順位
    • 4082 Re:色分けの優先順位
  • [4079] 色分けの優先順位 user 2005年11月02日 00:22

    ヘルプを見ると色分けの優先順位は、
    正規表現キーワード>コメント(ブロック)
    となっていますが、コメントブロック中の正規表現キーワードが色分けされません。
    (コメントの色のままです)

    コメントブロック中で色分けする方法って何かありますでしょうか?
    • [4081] RE: 色分けの優先順位 すい 2005年11月03日 12:28

      >正規表現キーワード>コメント(ブロック)
      >となっていますが、<<略>>

      これは
      「“コメント”と“正規表現キーワード”に同一ルールを定義した場合、
       “正規表現キーワード”が優先して適用される。」
      という意図ではないかと。

      例えば
      ・行型コメントに「//」と定義し、「//」以降をコメントと定義する。
      ・正規表現キーワードに「/\/\/.*/k」で、「//」以降を強調表示する。
      という具合に両者に同じルールを定義すると、“正規表現キーワード”の
      ルールの方が優先して適用されます。

      そういう話でしょう。

      で、“コメント”“正規表現キーワード”は、どちらも、
      「何にも色分けされていない範囲の文字列にのみ適用される物」
      という仕様になっています。

      一度“コメント”と判定されてしまった範囲の文字列に対しては
      “正規表現キーワード”が適用される事はありません。
      同様に一度“正規表現キーワード”で色分けされる場所であると
      判定されてしまった範囲の文字列に対して、“コメント”が適用
      される事はありません。

      例えば
      -----
      123 // test % abc
      -----
      というテキスト文字列に対して

      ・行型コメントに「//」と定義し、「//」以降をコメントと定義する。
      ・正規表現キーワードで「%」以降、行末までを正規表現キーワードで色分けしろ。

      にすると、先に「//」以降、行末までの範囲は全てコメント扱いになり、
      正規表現のルールが適用される事はありません。

      逆に

      ・行型コメントに「%」と定義し、「%」以降をコメントと定義する。
      ・正規表現キーワードで「//」以降、行末までを正規表現キーワードで色分けしろ。

      にすると、先に「//」以降、行末までの範囲は全て正規表現キーワード
      扱いになり、コメントが適用される事はありません。


      この辺のルールを明確に理解した上で各種色分け機能同士で
      文字列の奪い合いをするように考えながら定義していくと
      かなり柔軟な色分けも出来るようになっていきます。

      どういう色分けをしたいのか分かりませんが、ある程度複雑なルールでしたら
      “正規表現キーワード”のみで定義していく
      (コメント等も“正規表現キーワード”で塗り分ける)
      という方向で考えてけばうまくいく *かも* 。
      もっともブロック型のコメントは“正規表現キーワード”では完全な代用ができませんが。
      (“正規表現キーワード”は複数行にまたがる色分けは出来ませんから)

      ただ、プロック型コメントと正規表現キーワードに、色分け開始側が
      同じ文字列になるルールを定義した場合の挙動がちょっと違うっぽいんですけど。
      • [4083] Re2: 色分けの優先順位 もか 2005年11月03日 23:57

        >ただ、プロック型コメントと正規表現キーワードに、色分け開始側が
        >同じ文字列になるルールを定義した場合の挙動がちょっと違うっぽいんですけど。
        やはり気が付いていましたか。さすがです。
         開発掲示板なので、以下開発者各位向け。
        サクラエディタの色分け解析ルーチンは、全部で3つあって、
        ・行データの変更に、各レイアウト行の先頭色を決めるもの(CLayoutMgr)
        ・実際の作画時に各文字の色を決定しつつ作画するもの(CEditView::OnPaint)
        ・対括弧の色を戻すときに各文字の色を決定するもの(CEditView::GetColorIndex)
        後者の2つはほぼ同じですが、CLayoutMgrでは本来”奪い合い”の中で優先順位の高い「正規表現キーワード」の色分け解析をサボるために、変な結果になります。
         ちなみに、私はこのバグっぽい動作を利用して、xmlの色解析に
        「<!--.*-->」「<!--|-->」「<|>」(BBS上では\等省略して記述)を正規表現キーワードで指定。
        さらにコメントで「<!--」~「-->」を指定して使っています。

         ところで、CLayoutMgrのコメント解析は、有効・無効に関わらず解析するために、タイプ別設定でコメント文字列(ブロック型)を設定してあると色分けが変なときがあります。
        たとえば、C/C++の設定でコメントの色分けを無効にした場合、下記のようになります。
        if( IsText() )
        /* switch ←これは、「キーワード色になる」
        if ←これの色は変わらない。(テキスト色)
        */

        #すいさんには釈迦に説法でしょうが、メモってことでご了承を。
    • [4082] Re:色分けの優先順位 じゅうじ 2005年11月03日 17:04

      ▼ userさん
      > ヘルプを見ると色分けの優先順位は、
      > 正規表現キーワード>コメント(ブロック)
      > となっていますが、コメントブロック中の正規表現キーワードが色分けされません。
      > (コメントの色のままです)

      ヘルプ→コマンド概要→「ツール(T)」メニュー→タイプ別設定→タイプ別設定『カラー』プロパティ
      おお、ツリーが深い!
      >>help:?の方に、userさんが正しいと思うように書き換えて投稿していいんです。