3

私が作成した単純な to-do リスト言語の文法では、一部のスコープが正規表現規則で重複しているため、特定のスコープがまったく認識されません。これらのスコープを優先して、別のスコープ内で認識されるようにしたいと思います。

現在、次のようになっています。

ここに画像の説明を入力

スコープは次のとおりです。

  • XXam/pm緊急 (赤、またはで始まる行*)
  • 待機中 (黄色; で始まる行`)
  • url (紫; で始まる単語http)
  • タグ (青; で始まる単語@)

緊急や待機中の行でもタグやURLに色をつけてほしいのですが、現状Scope and Token Inspectorを見ると、2行目と3行目が全て緊急範囲で、4行目全てが待機範囲と表示されているのですが、これらの行には、タグと URL が含まれている必要があります。

.tmLanguage ファイルの定義の順序を逆にしてみましたが、違いはありませんでした。これらの定義は次のとおりです。

<dict>
  <key>match</key>
  <string>\B\@\w+</string>
  <key>name</key>
  <string>constant.language.tag.todotxt</string>
</dict>
<dict>
  <key>match</key>
  <string>http.*?( |$)</string>
  <key>name</key>
  <string>constant.language.url.todotxt</string>
</dict>
<dict>
  <key>match</key>
  <string>^`.*$</string>
  <key>name</key>
  <string>constant.language.waiting.todotxt</string>
</dict>
<dict>
  <key>match</key>
  <string>^\*.*$|^\d.{0,5}[ap]m.*$</string>
  <key>name</key>
  <string>constant.language.urgent.todotxt</string>
</dict>

では、tag と url のスコープが緊急および待機中のスコープ内にある場合でも認識されるようにするには、何を変更する必要があるでしょうか?

更新: 不完全な回避策

次の正規表現を使用して、行でタグまたは URL が検出されるとすぐに緊急スコープと待機スコープ (赤と黄色) を終了させることで、スコープの重複を防ぐことができます。

<key>match</key>
<string>^`.*?(?= @| http|$)</string>
<key>name</key>
<string>constant.language.waiting.todotxt</string>
...
<key>match</key>
<string>(^\*.*?|^\d.{0,5}[ap]m.*?)(?= @| http|$)</string>
<key>name</key>
<string>constant.language.urgent.todotxt</string>

この回避策の制限は、タグと URL を行末に配置する必要があることです。そうしないと、通常のテキストが本来あるべきでない場所に表示されます。

ここに画像の説明を入力

理想的には、タグと URL が緊急スコープと待機スコープ内で認識されることを希望します。これにより、行の途中にあるタグや URL の後でも緊急スコープまたは待機スコープを継続できます。

4

0 に答える 0