Ok je te passe un exemple plus représentatif:
<key>repository</key>
<dict>
<key>entity</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>(@[apre])(\[)</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>entity.other.attribute-name</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.definition.dictionary.begin.json</string>
</dict>
</dict>
<key>end</key>
<string>\]</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.dictionary.end.json</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>(x|y|z|dx|dy|dz|r|rm|rx|rxm|ry|rym|m|c|l|lm|team|name|type|tag|id|score_[^\s_,=]+(_min)?)(=)(!)?((-?\d*)|([^,=\]]*))(,)*</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>entity.name.tag</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>keyword.operator</string>
</dict>
<key>4</key>
<dict>
<key>name</key>
<string>keyword.operator</string>
</dict>
<key>6</key>
<dict>
<key>name</key>
<string>constant.numeric</string>
</dict>
<key>7</key>
<dict>
<key>name</key>
<string>variable.parameter</string>
</dict>
<key>8</key>
<dict>
<key>name</key>
<string>punctuation.separator.dictionary.pair.json</string>
</dict>
</dict>
</dict>
<dict>
<key>match</key>
<string>,</string>
<key>name</key>
<string>punctuation.separator.dictionary.pair.json</string>
</dict>
</array>
</dict>
<dict>
<key>name</key>
<string>entity.other.attribute-name</string>
<key>match</key>
<string>\B(@[apre])\b</string>
</dict>
<dict>
<key>comment</key>
<string>nom d'un joueur</string>
<key>name</key>
<string>entity.other.attribute-name</string>
<key>match</key>
<string>\b(\w){1,16}\b</string>
</dict>
</array>
</dict>
</dict>
Voilà le gros bloc “entity” à utiliser avec include, tu comprend mieux pourquoi Déjà, j’aimerais bien savoir comment appliquer le “modifier” (les lettres qui change les règles comme lazy par ex) qui fait que ce texte ne peut matcher qu’une fois, et pas plusieurs fois comme c’est de base.
Ensuite, j’ai besoin que ce regex soit intégré directement après le regex ^execute
séparé par un espace et suivi d’un nouvel espace puis du regex detect
. Voilà ce que j’ai essayé de faire, ce qui comporte de nombreux problèmes:
<dict>
<key>begin</key>
<string>\b(^execute)\b</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>keyword.control</string>
</dict>
</dict>
<key>end</key>
<string>($|detect)</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>keyword.control</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#entity</string>
</dict>
<dict>
<key>match</key>
<string> {2,}|[^ ]</string>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>invalid.illegal</string>
</dict>
</dict>
</dict>
</array>
</dict>
Sans lister tout les problèmes, il y a le fait que le bloc “entity” peut très bien match sans être précédé d’un espace et de ^execute
et que, comme énoncé précédemment, il peut être utilisé plusieurs fois.
Merci encore pour ton intérêt et ton aide