gtksourceview3.0 で Ruby の範囲境界を構文強調表示するにはどうすればよいですか?

gtksourceview3.0 で Ruby の範囲境界を構文強調表示するにはどうすればよいですか?

私はほとんどのコーディングを gedit で行っています。これは整数やその他の構文を強調表示します。たとえば のように Ruby で整数範囲を使用すると、0..3整数は適切に強調表示されず、通常のテキスト色になります。 を確認しました/usr/share/gtksourceview3.0/language-specs/ruby.langが、残念ながら、解決策は予想していたよりもはるかに複雑であるようです。この問題を修正するにはどうすればよいですか?

答え1

さて、現時点では「ブルートフォース」ソリューションのみを提案します。このタスクは正規表現の知識がすべてです。

ここにあります。

まず、 を再定義するのではなくdecimal、同じスタイルを使用して範囲全体に一致する新しい正規表現を定義することにしました。手順は 3 つあります。

ところで、これはガイドですgedit の言語仕様について。

スタイル

まずスタイルを定義しましょう。

セクションの<styles>前に挿入decimal:

<style id="range" _name="Range" map-to="def:decimal"/>

マッチング

次に、セクションの<definitions>前に以下を挿入しますdecimal:

<context id="range" style-ref="decimal">
  <match>(?&lt;![\w\.])(([1-9](_?[0-9])*|0)\s*\.\.\.?\s*([1-9](_?[0-9])*|0))(?![\w\.])</match>
</context>

この正規表現小数点のみの範囲に一致(改善の余地は常にある)例えば

3..7
3...7
3 .. 7
3 ... 7

使用されている正規表現はすべてPCRE(Perl互換)です。私が思うに、最も良い方法はざっと目を通すことです。Perl 正規表現ドキュメント. だから、あなた自身のものを発明して、あなたが望むものに合わせてください。

マッチングを呼び出す

構文の強調表示を強制するには、この式を次のように記述する必要があります。前にセクション内の小数点<include>:

<context id="ruby" class="no-spell-check">
  <include>
    ...
    <context ref="range"/>
    <context ref="decimal"/>
    ...
  </include>
</context>

そしてGeditを再起動してください。

関連情報