1

私は新しい GtkSourceView 言語仕様を書いています。チュートリアルや他のインターネット リソースにある情報に従ってください。私が定義している言語は、次のように数字を取ることができます:

  1. 1 つ以上のdigit文字
  2. 必要に応じて (末尾などに) 文字LlN、またはを追加しnます。

例:

1000
1234L
987654321n

これは考えられる数少ない定義の 1 つにすぎないことに注意してください。

これまでのところ、私は書いてきました(おおよそ(定義の他の部分は省略)):

<context id="number" style-ref="decimal" end-at-line-end="true">
    <start>(\d+)([NnlL]?)</start>
    <end>\D</end>
</context>

私はそれを次のように解釈します: _Anumberは 1 つ以上の数字文字で始まり、オプションで次のいずれかが続きます: N n l L、数字以外の数字 (スペース、文字など) に遭遇すると終了します。

残念ながら、指定された文字 (またはその問題の任意の文字) を追加すると失敗するため、これはうまく機能しません (このコンテキストでは、それはハイライトしないことを意味します)。

このパターンを一致させる方法についてのアイデアはありますか? 前もって感謝します!:)

4

1 に答える 1

1

Container Context は必要ありません。これは、文字列リテラルやコメントのようなもので、開始パターンと終了パターンによって識別され、他のコンテキストが含まれる場合があります。(たとえば、文字列リテラルには のようなエスケープ シーケンスが含まれる場合があり、このスクリーンショット\nのように、別の方法で強調表示する必要がある場合があります。)「数値」トークンは、単一の単純な正規表現と完全に一致させることができます。つまり、単純なコンテキストが必要です。 :

<context id="number" style-ref="decimal">
    <match>\b\d+[NnlL]?\b</match>
</context>

免責事項: GtkSourceView を使用したことはありませんが、EditPad Proや自分で Java で作成したものなど、他の正規表現ベースの構文ハイライターを使用したことがあります。

于 2012-10-05T00:24:36.257 に答える