【要望】数値リテラル、ネスト可能なコメント

  1. Mery2になってソースコードの色分け対応言語を追加できるようになったのはありがたいことなのですが、いくつか物足りない点があります。

    D言語用の設定を作るに当たり、ネスト可能なコメントの色分けができないことに気づきました。
    また、Luaでは --[==[ に呼応する ]==] がコメントになりますが(「=」の数は任意だがはじめと終わりで同じ数でなければならない)、このような例は対応が難しいでしょうか。

    また、欲を言えば数値リテラルを別の色で表示できればありがたいのですが(ただ、十六進接頭辞が言語によって異なるとか、C言語にはuとかfとかのリテラル接尾辞があるとかで設定項目を増やさないといけないとか、Rubyの場合(リテラルもオブジェクトであるという性質のため)小数点なのかメソッド呼び出しなのかを識別する必要があったりするとか、いろいろ問題はありますが)。

     |  MihailJP  |  返信
  2. こんばんは、書き込みありがとうございます。

    > D言語用の設定を作るに当たり、ネスト可能なコメントの色分けができないことに気づきました。
    > また、Luaでは --[==[ に呼応する ]==] がコメントになりますが(「=」の数は任意だがはじめと終わりで同じ数でなければならない)、このような例は対応が難しいでしょうか。

    やはり気づかれてしまいますよね、、、
    ごめんなさい、仕様上、不可能です。
    (正規表現で指定とかも実装できないと思います)

    構文の設定でコメントは 2 つまで指定できますので、

    コメント 1
    開始: --[[
    終了: ]]
    行コメント:

    コメント 2
    開始: --[=[
    終了: ]=]
    行コメント: --

    とかにすると 2 段階まではいけそうですが・・・ダメですよね。
    良い案が思いつきません。。。

    > また、欲を言えば数値リテラルを別の色で表示できればありがたいのですが(ただ、十六進接頭辞が言語によって異なるとか、C言語にはuとかfとかのリテラル接尾辞があるとかで設定項目を増やさないといけないとか、Rubyの場合(リテラルもオブジェクトであるという性質のため)小数点なのかメソッド呼び出しなのかを識別する必要があったりするとか、いろいろ問題はありますが)。

    強調文字列の設定で正規表現を使って指定すればある程度は可能かもしれません。
    (数値用に強調文字色をひとつ潰さなきゃなりません)

    例えばC 言語の 0x ですと 0x[\h]+ のような指定ができます。
    さすがに Ruby のような細かい判定はちと厳しいかもしれませんが・・・。

     |  Kuro  |  返信
  3. 強調文字列は、正規表現を使っても、一致範囲が複数行になるとき、判定は正しくされ
    ますが、強調表示は1行目だけになってしまいます。

    検索であれば、その一致範囲の複数行が強調表示されます。
    一時的には、これで代用に…

    /* */

    検索・選択の正規表現
    (?<a>\/\*(?:(?:(?:(?!\/\*)(?!\*\/).)*?\n)*?(?:(?!\/\*)(?!\*\/).)*?(?:\g<a>(?:\n|(?:(?!\/\*)(?!\*\/).))*?)*?)\*\/)

    テスト文字列
    /*
    /*
    this is comment1
    */
    this is comment2
    */

    /* /* this is comment1 */ this is comment2 */

    /+
    +/

    検索・選択の正規表現
    (?<a>\/\+(?:(?:(?:(?!\/\+)(?!\+\/).)*?\n)*?(?:(?!\/\+)(?!\+\/).)*?(?:\g<a>(?:\n|(?:(?!\/\+)(?!\+\/).))*?)*?)\+\/)

    テスト文字列
    /+
    /+
    this is comment1
    +/
    this is comment2
    +/

    /+ /+ this is comment1 +/ this is comment2 +/

    --[==[
    ]==]
    (開始と終了の = は1字以上の同数)

    検索・選択の正規表現
    (?<a>\-\-\[(?<b>\=+)\[(?:(?:(?:(?!\-\-\[\k<b>\[)(?!\]\k<b>\]).)*?\n)*?(?:(?!\-\-\[\k<b>\[)(?!\]\k<b>\]).)*?(?:\g<a>(?:\n|(?:(?!\-\-\[\k<b>\[)(?!\]\k<b>\]).))*?)*?)\]\k<b>\])

    テスト文字列
    --[==[
    this is comment
    ]==]

    --[==[
    --[==[
    --[==[
    this is comment1
    ]==]
    this is comment2
    ]==]
    this is comment3
    ]==]

    --[==[--[==[--[==[ this is comment1]==] this is comment2]==] this is comment3]==]

    --[=[
    --[==[
    --[===[
    this is comment1
    ]===]
    this is comment2
    ]==]
    this is comment3
    ]=]

    --[=[--[==[--[===[ this is comment1]===] this is comment2]==] this is comment3]=]

    --[=[
    --[==[
    --[===[
    this is comment1
    ]=]
    this is comment2
    ]==]
    this is comment3
    ]===]

    --[=[--[==[--[===[ this is comment1]=] this is comment2]==] this is comment3]===]

     |  もいすん  |  返信
スポンサーリンク