Skip to content

Instantly share code, notes, and snippets.

@jtojnar
Created August 22, 2022 01:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jtojnar/ae41fdf515d7ed91e5bfdb50107d1772 to your computer and use it in GitHub Desktop.
Save jtojnar/ae41fdf515d7ed91e5bfdb50107d1772 to your computer and use it in GitHub Desktop.
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist
PUBLIC '-//Apple Computer//DTD PLIST 1.0//EN'
'http://www.apple.com/DTDs/PropertyList-1.0.dtd'>
<plist version="1.0">
<dict>
<key>scopeName</key>
<string>etc</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#comma</string>
</dict>
<dict>
<key>include</key>
<string>#comment</string>
</dict>
<dict>
<key>include</key>
<string>#esc</string>
</dict>
<dict>
<key>include</key>
<string>#float</string>
</dict>
<dict>
<key>include</key>
<string>#int</string>
</dict>
<dict>
<key>include</key>
<string>#str</string>
</dict>
<dict>
<key>include</key>
<string>#colon</string>
</dict>
<dict>
<key>include</key>
<string>#eql</string>
</dict>
<dict>
<key>include</key>
<string>#dot</string>
</dict>
</array>
<key>repository</key>
<dict>
<key>base64</key>
<dict>
<key>name</key>
<string>constant.numeric.base64</string>
<key>match</key>
<string>[A-Za-z0-9+/=]{4,}</string>
</dict>
<key>comma</key>
<dict>
<key>name</key>
<string>punctuation.separator.delimiter.comma</string>
<key>match</key>
<string>,</string>
</dict>
<key>comment</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#commentHash</string>
</dict>
</array>
</dict>
<key>commentHash</key>
<dict>
<key>name</key>
<string>comment.line.number-sign</string>
<key>begin</key>
<string>#</string>
<key>end</key>
<string>$</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.comment</string>
</dict>
</dict>
</dict>
<key>commentSemi</key>
<dict>
<key>name</key>
<string>comment.line.semicolon</string>
<key>begin</key>
<string>;+</string>
<key>end</key>
<string>$</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.comment</string>
</dict>
</dict>
</dict>
<key>commentSlash</key>
<dict>
<key>name</key>
<string>comment.line.double-slash</string>
<key>begin</key>
<string>//</string>
<key>end</key>
<string>$</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.comment</string>
</dict>
</dict>
</dict>
<key>bareword</key>
<dict>
<key>name</key>
<string>string.unquoted.bareword</string>
<key>match</key>
<string>[^&quot;\s][\S]*</string>
</dict>
<key>bool</key>
<dict>
<key>name</key>
<string>constant.logical.bool.boolean.${1:/downcase}</string>
<key>match</key>
<string>\b(true|false|TRUE|FALSE)\b</string>
</dict>
<key>bracket</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\{</string>
<key>name</key>
<string>punctuation.definition.bracket.curly.brace.begin</string>
</dict>
<dict>
<key>match</key>
<string>\}</string>
<key>name</key>
<string>punctuation.definition.bracket.curly.brace.end</string>
</dict>
<dict>
<key>match</key>
<string>\[</string>
<key>name</key>
<string>punctuation.definition.bracket.square.begin</string>
</dict>
<dict>
<key>match</key>
<string>\]</string>
<key>name</key>
<string>punctuation.definition.bracket.square.end</string>
</dict>
<dict>
<key>match</key>
<string>\(</string>
<key>name</key>
<string>punctuation.definition.bracket.round.parenthesis.begin</string>
</dict>
<dict>
<key>match</key>
<string>\)</string>
<key>name</key>
<string>punctuation.definition.bracket.round.parenthesis.end</string>
</dict>
<dict>
<key>match</key>
<string>&lt;</string>
<key>name</key>
<string>punctuation.definition.bracket.angle.ascii.begin</string>
</dict>
<dict>
<key>match</key>
<string>&gt;</string>
<key>name</key>
<string>punctuation.definition.bracket.angle.ascii.end</string>
</dict>
<dict>
<key>match</key>
<string>⟨</string>
<key>name</key>
<string>punctuation.definition.bracket.angle.unicode.begin</string>
</dict>
<dict>
<key>match</key>
<string>⟩</string>
<key>name</key>
<string>punctuation.definition.bracket.angle.unicode.end</string>
</dict>
</array>
</dict>
<key>colon</key>
<dict>
<key>name</key>
<string>punctuation.delimiter.separator.colon</string>
<key>match</key>
<string>:</string>
</dict>
<key>dash</key>
<dict>
<key>name</key>
<string>punctuation.delimiter.separator.dash.hyphen</string>
<key>match</key>
<string>-</string>
</dict>
<key>dots</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#ellipsis</string>
</dict>
<dict>
<key>include</key>
<string>#dotPair</string>
</dict>
<dict>
<key>include</key>
<string>#dot</string>
</dict>
</array>
</dict>
<key>dot</key>
<dict>
<key>name</key>
<string>punctuation.delimiter.separator.property.period.dot</string>
<key>match</key>
<string>\.</string>
</dict>
<key>dotPair</key>
<dict>
<key>name</key>
<string>keyword.operator.punctuation.dots.splat.range.spread.rest</string>
<key>match</key>
<string>\.\.|‥</string>
</dict>
<key>ellipsis</key>
<dict>
<key>name</key>
<string>keyword.operator.punctuation.ellipsis.splat.range.spread.rest</string>
<key>match</key>
<string>\.{3}|…</string>
</dict>
<key>dotTrail</key>
<dict>
<key>name</key>
<string>punctuation.delimiter.separator.dotted.border.leader.dots</string>
<key>match</key>
<string>\.{4,}</string>
</dict>
<key>email</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#emailBracketed</string>
</dict>
<dict>
<key>include</key>
<string>#emailQuoted</string>
</dict>
<dict>
<key>include</key>
<string>#emailUnquoted</string>
</dict>
</array>
</dict>
<key>emailBracketed</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>name</key>
<string>meta.email-address.bracketed.ascii.angle-brackets</string>
<key>match</key>
<string>(&lt;)\s*([^&gt;@\s]+@[^&gt;@\s]+)\s*(&gt;)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#bracket</string>
</dict>
</array>
</dict>
<key>2</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#emailInnards</string>
</dict>
</array>
</dict>
<key>3</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#bracket</string>
</dict>
</array>
</dict>
</dict>
</dict>
<dict>
<key>name</key>
<string>meta.email-address.bracketed.unicode.angle-brackets</string>
<key>match</key>
<string>(⟨)\s*([^⟩@\s]+@[^⟩@\s]+)\s*(⟩)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#bracket</string>
</dict>
</array>
</dict>
<key>2</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#emailInnards</string>
</dict>
</array>
</dict>
<key>3</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#bracket</string>
</dict>
</array>
</dict>
</dict>
</dict>
<dict>
<key>name</key>
<string>meta.email-address.bracketed.guillemots</string>
<key>match</key>
<string>(«)\s*([^»@\s]+@[^»@\s]+)\s*(»)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#bracket</string>
</dict>
</array>
</dict>
<key>2</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#emailInnards</string>
</dict>
</array>
</dict>
<key>3</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#bracket</string>
</dict>
</array>
</dict>
</dict>
</dict>
<dict>
<key>name</key>
<string>meta.email-address.bracketed.round-brackets</string>
<key>match</key>
<string>(\()\s*([^\)@\s]+@[^\)@\s]+)\s*(\))</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#bracket</string>
</dict>
</array>
</dict>
<key>2</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#emailInnards</string>
</dict>
</array>
</dict>
<key>3</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#bracket</string>
</dict>
</array>
</dict>
</dict>
</dict>
<dict>
<key>name</key>
<string>meta.email-address.bracketed.curly-brackets</string>
<key>match</key>
<string>({)\s*([^}@\s]+@[^}@\s]+)\s*(})</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#bracket</string>
</dict>
</array>
</dict>
<key>2</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#emailInnards</string>
</dict>
</array>
</dict>
<key>3</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#bracket</string>
</dict>
</array>
</dict>
</dict>
</dict>
<dict>
<key>name</key>
<string>meta.email-address.bracketed.square-brackets</string>
<key>match</key>
<string>(\[)\s*([^\]@\s]+@[^\]@\s]+)\s*(\])</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#bracket</string>
</dict>
</array>
</dict>
<key>2</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#emailInnards</string>
</dict>
</array>
</dict>
<key>3</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#bracket</string>
</dict>
</array>
</dict>
</dict>
</dict>
</array>
</dict>
<key>emailQuoted</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>name</key>
<string>meta.email-address.quoted.ascii.double-quotes</string>
<key>match</key>
<string>(&quot;)\s*([^&quot;@\s]+@[^&quot;@\s]+)\s*(&quot;)</string>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>string.quoted.double</string>
</dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.email-address</string>
</dict>
<key>2</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#emailInnards</string>
</dict>
</array>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.email-address</string>
</dict>
</dict>
</dict>
<dict>
<key>name</key>
<string>meta.email-address.quoted.unicode.double-quotes</string>
<key>match</key>
<string>(“)\s*([^”@\s]+@[^”@\s]+)\s*(”)</string>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>string.quoted.double</string>
</dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.email-address</string>
</dict>
<key>2</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#emailInnards</string>
</dict>
</array>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.email-address</string>
</dict>
</dict>
</dict>
<dict>
<key>name</key>
<string>meta.email-address.quoted.unicode.single-quotes</string>
<key>match</key>
<string>(‘)\s*([^’@\s]+@[^’@\s]+)\s*(’)</string>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>string.quoted.single</string>
</dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.email-address</string>
</dict>
<key>2</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#emailInnards</string>
</dict>
</array>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.email-address</string>
</dict>
</dict>
</dict>
<dict>
<key>name</key>
<string>meta.email-address.quoted.backticks</string>
<key>match</key>
<string>(`)\s*([^`@\s]+@[^`@\s]+)\s*(`)</string>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>string.quoted.template.backticks</string>
</dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.email-address</string>
</dict>
<key>2</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#emailInnards</string>
</dict>
</array>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.email-address</string>
</dict>
</dict>
</dict>
<dict>
<key>name</key>
<string>meta.email-address.quoted.single-quotes</string>
<key>match</key>
<string>(`|')\s*([^'@\s]+@[^'@\s]+)\s*(')</string>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>string.quoted.single</string>
</dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.email-address</string>
</dict>
<key>2</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#emailInnards</string>
</dict>
</array>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.email-address</string>
</dict>
</dict>
</dict>
</array>
</dict>
<key>emailUnquoted</key>
<dict>
<key>name</key>
<string>meta.email-address.unquoted</string>
<key>match</key>
<string>(?x)
((?!\.) (?:[^\[\(&lt;⟨«&quot;'\s@.]|\.(?!\.))++ @
([^\[\(&lt;⟨«&quot;'\s@.]+?\.(?=[^\.\s])(?:[^\[\(&lt;⟨«&quot;'\s@.]|\.(?!\.))++))</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>string.unquoted.email-address</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#emailInnards</string>
</dict>
</array>
</dict>
</dict>
</dict>
<key>emailInnards</key>
<dict>
<key>name</key>
<string>constant.other.reference.link.underline.email</string>
<key>match</key>
<string>(?:\G|^|(?&lt;=\n)).+</string>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\G([^@]*)(@)(.*)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>meta.local-part</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.separator.at-sign.email</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>meta.domain</string>
</dict>
</dict>
</dict>
</array>
</dict>
</dict>
</dict>
<key>esc</key>
<dict>
<key>name</key>
<string>constant.character.escape.backslash</string>
<key>match</key>
<string>(\\).</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.escape.backslash</string>
</dict>
</dict>
</dict>
<key>eql</key>
<dict>
<key>name</key>
<string>keyword.operator.assignment.key-value.equals-sign</string>
<key>match</key>
<string>=</string>
</dict>
<key>float</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#floatExp</string>
</dict>
<dict>
<key>include</key>
<string>#floatNoExp</string>
</dict>
</array>
</dict>
<key>floatExp</key>
<dict>
<key>name</key>
<string>constant.numeric.float.real.decimal.dec.exponential.scientific</string>
<key>match</key>
<string>[-+]?(?:[0-9]*\.[0-9]+|[0-9]+\.)(?:[eE][-+]?[0-9]+)++</string>
</dict>
<key>floatNoExp</key>
<dict>
<key>name</key>
<string>constant.numeric.float.real.decimal.dec</string>
<key>match</key>
<string>[-+]?(?:[0-9]*\.[0-9]+|[0-9]+\.)++</string>
</dict>
<key>hex</key>
<dict>
<key>name</key>
<string>constant.numeric.integer.int.hexadecimal.hex</string>
<key>match</key>
<string>[-+]?[A-Fa-f0-9]+</string>
</dict>
<key>hexNoSign</key>
<dict>
<key>name</key>
<string>constant.numeric.integer.int.hexadecimal.hex</string>
<key>match</key>
<string>[A-Fa-f0-9]+</string>
</dict>
<key>int</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#intExp</string>
</dict>
<dict>
<key>include</key>
<string>#intNoExp</string>
</dict>
</array>
</dict>
<key>intExp</key>
<dict>
<key>name</key>
<string>constant.numeric.integer.int.decimal.dec.exponential.scientific</string>
<key>match</key>
<string>[-+]?[0-9]+[eE][-+]?[0-9]+</string>
</dict>
<key>intNoExp</key>
<dict>
<key>name</key>
<string>constant.numeric.integer.int.decimal.dec</string>
<key>match</key>
<string>[-+]?[0-9]+</string>
</dict>
<key>ip</key>
<dict>
<key>name</key>
<string>constant.numeric.other.ip-address</string>
<key>match</key>
<string>(?:\d+\.){3,}\d+(?=\s|$)</string>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#dot</string>
</dict>
</array>
</dict>
</dict>
</dict>
<key>kolon</key>
<dict>
<key>name</key>
<string>keyword.operator.assignment.key-value.colon</string>
<key>match</key>
<string>:</string>
</dict>
<key>num</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#float</string>
</dict>
<dict>
<key>include</key>
<string>#int</string>
</dict>
</array>
</dict>
<key>op</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#opBitAssign</string>
</dict>
<dict>
<key>include</key>
<string>#opMathAssign</string>
</dict>
<dict>
<key>include</key>
<string>#opBit</string>
</dict>
<dict>
<key>include</key>
<string>#opFix</string>
</dict>
<dict>
<key>include</key>
<string>#opCmp</string>
</dict>
<dict>
<key>include</key>
<string>#opLog</string>
</dict>
<dict>
<key>include</key>
<string>#opMath</string>
</dict>
</array>
</dict>
<key>opBit</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\^</string>
<key>name</key>
<string>keyword.operator.bitwise.xor</string>
</dict>
<dict>
<key>match</key>
<string>~</string>
<key>name</key>
<string>keyword.operator.bitwise.not</string>
</dict>
<dict>
<key>match</key>
<string>&amp;</string>
<key>name</key>
<string>keyword.operator.bitwise.and</string>
</dict>
<dict>
<key>match</key>
<string>\|</string>
<key>name</key>
<string>keyword.operator.bitwise.or</string>
</dict>
<dict>
<key>match</key>
<string>&lt;&lt;</string>
<key>name</key>
<string>keyword.operator.bitwise.shift.left</string>
</dict>
<dict>
<key>match</key>
<string>&gt;&gt;&gt;</string>
<key>name</key>
<string>keyword.operator.bitwise.shift.right.unsigned</string>
</dict>
<dict>
<key>match</key>
<string>&gt;&gt;</string>
<key>name</key>
<string>keyword.operator.bitwise.shift.right.signed</string>
</dict>
</array>
</dict>
<key>opBitAssign</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\^=</string>
<key>name</key>
<string>keyword.operator.assignment.bitwise.xor</string>
</dict>
<dict>
<key>match</key>
<string>~=</string>
<key>name</key>
<string>keyword.operator.assignment.bitwise.not</string>
</dict>
<dict>
<key>match</key>
<string>&amp;=</string>
<key>name</key>
<string>keyword.operator.assignment.bitwise.and</string>
</dict>
<dict>
<key>match</key>
<string>\|=</string>
<key>name</key>
<string>keyword.operator.assignment.bitwise.or</string>
</dict>
<dict>
<key>match</key>
<string>&lt;&lt;=</string>
<key>name</key>
<string>keyword.operator.assignment.bitwise.shift.left</string>
</dict>
<dict>
<key>match</key>
<string>&gt;&gt;&gt;=</string>
<key>name</key>
<string>keyword.operator.assignment.bitwise.shift.right.unsigned</string>
</dict>
<dict>
<key>match</key>
<string>&gt;&gt;=</string>
<key>name</key>
<string>keyword.operator.assignment.bitwise.shift.right.signed</string>
</dict>
</array>
</dict>
<key>opCmp</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>&lt;=&gt;</string>
<key>name</key>
<string>keyword.operator.logical.comparison.starship.spaceship</string>
</dict>
<dict>
<key>match</key>
<string>&lt;=</string>
<key>name</key>
<string>keyword.operator.logical.comparison.less-than-or-equal-to.lte</string>
</dict>
<dict>
<key>match</key>
<string>&lt;</string>
<key>name</key>
<string>keyword.operator.logical.comparison.less-than.lt</string>
</dict>
<dict>
<key>match</key>
<string>&gt;=</string>
<key>name</key>
<string>keyword.operator.logical.comparison.greater-than-or-equal-to.gte</string>
</dict>
<dict>
<key>match</key>
<string>&gt;</string>
<key>name</key>
<string>keyword.operator.logical.comparison.greater-than.gt</string>
</dict>
<dict>
<key>match</key>
<string>===</string>
<key>name</key>
<string>keyword.operator.logical.comparison.equal-to.equals.equal.eql.eq.strict</string>
</dict>
<dict>
<key>match</key>
<string>==</string>
<key>name</key>
<string>keyword.operator.logical.comparison.equal-to.equals.equal.eql.eq</string>
</dict>
<dict>
<key>match</key>
<string>!==</string>
<key>name</key>
<string>keyword.operator.logical.comparison.not-equal-to.not-equal.unequal.neql.ne.strict</string>
</dict>
<dict>
<key>match</key>
<string>!=</string>
<key>name</key>
<string>keyword.operator.logical.comparison.not-equal-to.not-equal.unequal.neql.ne</string>
</dict>
</array>
</dict>
<key>opFix</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\+{2}</string>
<key>name</key>
<string>keyword.operator.increment</string>
</dict>
<dict>
<key>match</key>
<string>-{2}</string>
<key>name</key>
<string>keyword.operator.decrement</string>
</dict>
</array>
</dict>
<key>opLog</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>!!</string>
<key>name</key>
<string>keyword.operator.logical.boolean.cast</string>
</dict>
<dict>
<key>match</key>
<string>!</string>
<key>name</key>
<string>keyword.operator.logical.boolean.not.negation.negate</string>
</dict>
<dict>
<key>match</key>
<string>&amp;&amp;</string>
<key>name</key>
<string>keyword.operator.logical.boolean.and</string>
</dict>
<dict>
<key>match</key>
<string>\|{2}</string>
<key>name</key>
<string>keyword.operator.logical.boolean.or</string>
</dict>
<dict>
<key>match</key>
<string>\?{2}</string>
<key>name</key>
<string>keyword.operator.logical.boolean.or.nullish</string>
</dict>
</array>
</dict>
<key>opMath</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\*{2}|\^</string>
<key>name</key>
<string>keyword.operator.arithmetic.exponentiation.exponent.exp.power</string>
</dict>
<dict>
<key>match</key>
<string>\+</string>
<key>name</key>
<string>keyword.operator.arithmetic.addition.add.plus</string>
</dict>
<dict>
<key>match</key>
<string>\*</string>
<key>name</key>
<string>keyword.operator.arithmetic.multiplication.multiply.times</string>
</dict>
<dict>
<key>match</key>
<string>/</string>
<key>name</key>
<string>keyword.operator.arithmetic.division.divide</string>
</dict>
<dict>
<key>match</key>
<string>%</string>
<key>name</key>
<string>keyword.operator.arithmetic.remainder.modulo.modulus.mod</string>
</dict>
<dict>
<key>name</key>
<string>keyword.operator.arithmetic.subtraction.subtract.minus</string>
<key>match</key>
<string>[-֊־᐀᠆‐-―⸗⸚⸺⸻⹀〜〰゠︱︲﹘﹣-]</string>
</dict>
</array>
</dict>
<key>opMathAssign</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\*{2}=|\^=</string>
<key>name</key>
<string>keyword.operator.assignment.arithmetic.exponentiation.exponent.exp.power</string>
</dict>
<dict>
<key>match</key>
<string>\+=</string>
<key>name</key>
<string>keyword.operator.assignment.arithmetic.addition.add.plus</string>
</dict>
<dict>
<key>match</key>
<string>\*=</string>
<key>name</key>
<string>keyword.operator.assignment.arithmetic.multiplication.multiply.times</string>
</dict>
<dict>
<key>match</key>
<string>/=</string>
<key>name</key>
<string>keyword.operator.assignment.arithmetic.division.divide</string>
</dict>
<dict>
<key>match</key>
<string>%=</string>
<key>name</key>
<string>keyword.operator.assignment.arithmetic.remainder.modulo.modulus.mod</string>
</dict>
<dict>
<key>name</key>
<string>keyword.operator.assignment.arithmetic.subtraction.subtract.minus</string>
<key>match</key>
<string>[-֊־᐀᠆‐-―⸗⸚⸺⸻⹀〜〰゠︱︲﹘﹣-]=</string>
</dict>
</array>
</dict>
<key>semi</key>
<dict>
<key>name</key>
<string>punctuation.delimiter.separator.semicolon</string>
<key>match</key>
<string>;</string>
</dict>
<key>str</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#strDouble</string>
</dict>
<dict>
<key>include</key>
<string>#strSingle</string>
</dict>
</array>
</dict>
<key>strDouble</key>
<dict>
<key>name</key>
<string>string.quoted.double</string>
<key>begin</key>
<string>&quot;</string>
<key>end</key>
<string>&quot;|(?=$)</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin</string>
</dict>
</dict>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#esc</string>
</dict>
</array>
</dict>
<key>strSingle</key>
<dict>
<key>name</key>
<string>string.quoted.single</string>
<key>begin</key>
<string>'</string>
<key>end</key>
<string>'|(?=$)</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin</string>
</dict>
</dict>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#esc</string>
</dict>
</array>
</dict>
<key>tab</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>^\t+</string>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\t</string>
<key>name</key>
<string>punctuation.whitespace.leading.tab.hard-tab</string>
</dict>
</array>
</dict>
</dict>
</dict>
<dict>
<key>match</key>
<string>\t+$</string>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\t</string>
<key>name</key>
<string>punctuation.whitespace.trailing.tab.hard-tab</string>
</dict>
</array>
</dict>
</dict>
</dict>
<dict>
<key>match</key>
<string>\t</string>
<key>name</key>
<string>punctuation.whitespace.tab.hard-tab</string>
</dict>
</array>
</dict>
<key>url</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>(?x)
(&quot;|'|\b)
(
# Not part of official URL schemes, included here for convenience
(?: (?:jdbc|mvn|odbc|view-source) :)?
# Common protocols/URI schemes
( https?
| s?ftp
| ftps
| file
| wss?
| (?:git|svn) (?:\+(?:https?|ssh))?
| ssh
# Less common URI schemes
| aaas?
| acap
| adiumxtra
| admin
| afp
| app
| atom
| aurora
| aw
| beshare
| bolo
| cassandra
| chrome(?:-extension)?
| coaps?
| cockroach
| content
| couchbase
| crid
| cvs
| dict
| dns
| docker
| ed2k
| facetime
| feed
| finger
| fish
| gemini
| github(?:-(?:mac|linux|windows))?
| gizmoproject
| gopher
| go
| hcp
| imap
| irc[6s]?
| issue
| keyparc
| lastfm
| ldaps?
| man(?:-?page)?
| maria(?:db)?
| market
| message
| mms
| modern-?sqlite
| mongodb
| ms-help
| mssql
| mumble
| my?sql
| netezza
| nfs
| ni
| nntp
| notes
| oleodbc
| oracle
| payto
| pgsql
| pg
| pop
| postgres(?:ql)?
| postgresql
| presto(?:dbs?|s)
| reload
| resource
| res
| rmi
| rsync
| rtmf?p
| rtmp
| s3
| saphana
| secondlife
| sgn
| shttp
| slack
| smb
| snmp
| soldat
| sqlite3?
| sqlserver
| steam
| stratum\+[a-z]+
| stuns?
| teamspeak
| telnet
| turns?
| txmt
| udp
| unreal
| ut2004
| ventrilo
| vnc
| wais
| web\+[a-z]+
| webcal
| wtai
| wyciwyg
| xmpp
| xri
| z39\.50[rs]
| zoommtg
# User-defined/arbitrary URI scheme starting with `x-`
| x(?:-[a-z][a-z0-9]*)++
) ://
# Path specifier
(?:
(?! \#\w*\#)
(?: [-:\@\w.,~%+_/?=&amp;\#;|!])
)+
# Don't include trailing punctuation
(?&lt;![-.,?:\#;])
)
(\1)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.link.begin.url</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>constant.other.reference.link.underline.$3.url</string>
</dict>
<key>4</key>
<dict>
<key>name</key>
<string>punctuation.definition.link.end.url</string>
</dict>
</dict>
</dict>
<dict>
<key>match</key>
<string>(?x)
(&quot;|'|\b)
(
mailto (:)
(?:
(?! \#\w*\#)
(?: [-:@\w.,~%+_/?=&amp;\#;|!])
)+
(?&lt;![-.,?:\#;])
)
(\1)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.link.begin.url</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>constant.other.reference.link.underline.mailto.url</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.separator.delimiter.scheme.url</string>
</dict>
<key>4</key>
<dict>
<key>name</key>
<string>punctuation.definition.link.end.url</string>
</dict>
</dict>
</dict>
</array>
</dict>
<key>version</key>
<dict>
<key>name</key>
<string>constant.other.version-string</string>
<key>match</key>
<string>(?x)
(&quot;|'|\b)
([vV]?)
(0 | [1-9]\d*) (\.)
(0 | [1-9]\d*) (\.)
(0 | [1-9]\d*)
(?:
(-)
(
(?: 0
| [1-9]\d*
| \d*[a-zA-Z-][0-9a-zA-Z-]*
)
(?:
\.
(?: 0
| [1-9]\d*
| \d*[a-zA-Z-][0-9a-zA-Z-]*
)
)*
)
)?
(?:
(\+)
(
[0-9a-zA-Z-]+
(?:\.[0-9a-zA-Z-]+)*
)
)?
(\1)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.version-string.begin</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.definition.version-prefix</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>meta.major.release-number</string>
</dict>
<key>4</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#dot</string>
</dict>
</array>
</dict>
<key>5</key>
<dict>
<key>name</key>
<string>meta.minor.release-number</string>
</dict>
<key>6</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#dot</string>
</dict>
</array>
</dict>
<key>7</key>
<dict>
<key>name</key>
<string>meta.patch.release-number</string>
</dict>
<key>8</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#dash</string>
</dict>
</array>
</dict>
<key>9</key>
<dict>
<key>name</key>
<string>meta.prerelease.release-number</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#dot</string>
</dict>
</array>
</dict>
<key>10</key>
<dict>
<key>name</key>
<string>punctuation.delimiter.separator.plus</string>
</dict>
<key>11</key>
<dict>
<key>name</key>
<string>meta.build-metadata</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#dot</string>
</dict>
</array>
</dict>
<key>12</key>
<dict>
<key>name</key>
<string>punctuation.definition.version-string.end</string>
</dict>
</dict>
</dict>
</dict>
</dict>
</plist>
{
"scopeName": "etc",
"patterns": [
{
"include": "#comma"
},
{
"include": "#comment"
},
{
"include": "#esc"
},
{
"include": "#float"
},
{
"include": "#int"
},
{
"include": "#str"
},
{
"include": "#colon"
},
{
"include": "#eql"
},
{
"include": "#dot"
}
],
"repository": {
"base64": {
"name": "constant.numeric.base64",
"match": "[A-Za-z0-9+/=]{4,}"
},
"comma": {
"name": "punctuation.separator.delimiter.comma",
"match": ","
},
"comment": {
"patterns": [
{
"include": "#commentHash"
}
]
},
"commentHash": {
"name": "comment.line.number-sign",
"begin": "#",
"end": "$",
"beginCaptures": {
"0": {
"name": "punctuation.definition.comment"
}
}
},
"commentSemi": {
"name": "comment.line.semicolon",
"begin": ";+",
"end": "$",
"beginCaptures": {
"0": {
"name": "punctuation.definition.comment"
}
}
},
"commentSlash": {
"name": "comment.line.double-slash",
"begin": "//",
"end": "$",
"beginCaptures": {
"0": {
"name": "punctuation.definition.comment"
}
}
},
"bareword": {
"name": "string.unquoted.bareword",
"match": "[^\"\\s][\\S]*"
},
"bool": {
"name": "constant.logical.bool.boolean.${1:/downcase}",
"match": "\\b(true|false|TRUE|FALSE)\\b"
},
"bracket": {
"patterns": [
{
"match": "\\{",
"name": "punctuation.definition.bracket.curly.brace.begin"
},
{
"match": "\\}",
"name": "punctuation.definition.bracket.curly.brace.end"
},
{
"match": "\\[",
"name": "punctuation.definition.bracket.square.begin"
},
{
"match": "\\]",
"name": "punctuation.definition.bracket.square.end"
},
{
"match": "\\(",
"name": "punctuation.definition.bracket.round.parenthesis.begin"
},
{
"match": "\\)",
"name": "punctuation.definition.bracket.round.parenthesis.end"
},
{
"match": "<",
"name": "punctuation.definition.bracket.angle.ascii.begin"
},
{
"match": ">",
"name": "punctuation.definition.bracket.angle.ascii.end"
},
{
"match": "⟨",
"name": "punctuation.definition.bracket.angle.unicode.begin"
},
{
"match": "⟩",
"name": "punctuation.definition.bracket.angle.unicode.end"
}
]
},
"colon": {
"name": "punctuation.delimiter.separator.colon",
"match": ":"
},
"dash": {
"name": "punctuation.delimiter.separator.dash.hyphen",
"match": "-"
},
"dots": {
"patterns": [
{
"include": "#ellipsis"
},
{
"include": "#dotPair"
},
{
"include": "#dot"
}
]
},
"dot": {
"name": "punctuation.delimiter.separator.property.period.dot",
"match": "\\."
},
"dotPair": {
"name": "keyword.operator.punctuation.dots.splat.range.spread.rest",
"match": "\\.\\.|‥"
},
"ellipsis": {
"name": "keyword.operator.punctuation.ellipsis.splat.range.spread.rest",
"match": "\\.{3}|…"
},
"dotTrail": {
"name": "punctuation.delimiter.separator.dotted.border.leader.dots",
"match": "\\.{4,}"
},
"email": {
"patterns": [
{
"include": "#emailBracketed"
},
{
"include": "#emailQuoted"
},
{
"include": "#emailUnquoted"
}
]
},
"emailBracketed": {
"patterns": [
{
"name": "meta.email-address.bracketed.ascii.angle-brackets",
"match": "(<)\\s*([^>@\\s]+@[^>@\\s]+)\\s*(>)",
"captures": {
"1": {
"patterns": [
{
"include": "#bracket"
}
]
},
"2": {
"patterns": [
{
"include": "#emailInnards"
}
]
},
"3": {
"patterns": [
{
"include": "#bracket"
}
]
}
}
},
{
"name": "meta.email-address.bracketed.unicode.angle-brackets",
"match": "(⟨)\\s*([^⟩@\\s]+@[^⟩@\\s]+)\\s*(⟩)",
"captures": {
"1": {
"patterns": [
{
"include": "#bracket"
}
]
},
"2": {
"patterns": [
{
"include": "#emailInnards"
}
]
},
"3": {
"patterns": [
{
"include": "#bracket"
}
]
}
}
},
{
"name": "meta.email-address.bracketed.guillemots",
"match": "(«)\\s*([^»@\\s]+@[^»@\\s]+)\\s*(»)",
"captures": {
"1": {
"patterns": [
{
"include": "#bracket"
}
]
},
"2": {
"patterns": [
{
"include": "#emailInnards"
}
]
},
"3": {
"patterns": [
{
"include": "#bracket"
}
]
}
}
},
{
"name": "meta.email-address.bracketed.round-brackets",
"match": "(\\()\\s*([^\\)@\\s]+@[^\\)@\\s]+)\\s*(\\))",
"captures": {
"1": {
"patterns": [
{
"include": "#bracket"
}
]
},
"2": {
"patterns": [
{
"include": "#emailInnards"
}
]
},
"3": {
"patterns": [
{
"include": "#bracket"
}
]
}
}
},
{
"name": "meta.email-address.bracketed.curly-brackets",
"match": "({)\\s*([^}@\\s]+@[^}@\\s]+)\\s*(})",
"captures": {
"1": {
"patterns": [
{
"include": "#bracket"
}
]
},
"2": {
"patterns": [
{
"include": "#emailInnards"
}
]
},
"3": {
"patterns": [
{
"include": "#bracket"
}
]
}
}
},
{
"name": "meta.email-address.bracketed.square-brackets",
"match": "(\\[)\\s*([^\\]@\\s]+@[^\\]@\\s]+)\\s*(\\])",
"captures": {
"1": {
"patterns": [
{
"include": "#bracket"
}
]
},
"2": {
"patterns": [
{
"include": "#emailInnards"
}
]
},
"3": {
"patterns": [
{
"include": "#bracket"
}
]
}
}
}
]
},
"emailQuoted": {
"patterns": [
{
"name": "meta.email-address.quoted.ascii.double-quotes",
"match": "(\")\\s*([^\"@\\s]+@[^\"@\\s]+)\\s*(\")",
"captures": {
"0": {
"name": "string.quoted.double"
},
"1": {
"name": "punctuation.definition.string.begin.email-address"
},
"2": {
"patterns": [
{
"include": "#emailInnards"
}
]
},
"3": {
"name": "punctuation.definition.string.end.email-address"
}
}
},
{
"name": "meta.email-address.quoted.unicode.double-quotes",
"match": "(“)\\s*([^”@\\s]+@[^”@\\s]+)\\s*(”)",
"captures": {
"0": {
"name": "string.quoted.double"
},
"1": {
"name": "punctuation.definition.string.begin.email-address"
},
"2": {
"patterns": [
{
"include": "#emailInnards"
}
]
},
"3": {
"name": "punctuation.definition.string.end.email-address"
}
}
},
{
"name": "meta.email-address.quoted.unicode.single-quotes",
"match": "(‘)\\s*([^’@\\s]+@[^’@\\s]+)\\s*(’)",
"captures": {
"0": {
"name": "string.quoted.single"
},
"1": {
"name": "punctuation.definition.string.begin.email-address"
},
"2": {
"patterns": [
{
"include": "#emailInnards"
}
]
},
"3": {
"name": "punctuation.definition.string.end.email-address"
}
}
},
{
"name": "meta.email-address.quoted.backticks",
"match": "(`)\\s*([^`@\\s]+@[^`@\\s]+)\\s*(`)",
"captures": {
"0": {
"name": "string.quoted.template.backticks"
},
"1": {
"name": "punctuation.definition.string.begin.email-address"
},
"2": {
"patterns": [
{
"include": "#emailInnards"
}
]
},
"3": {
"name": "punctuation.definition.string.end.email-address"
}
}
},
{
"name": "meta.email-address.quoted.single-quotes",
"match": "(`|')\\s*([^'@\\s]+@[^'@\\s]+)\\s*(')",
"captures": {
"0": {
"name": "string.quoted.single"
},
"1": {
"name": "punctuation.definition.string.begin.email-address"
},
"2": {
"patterns": [
{
"include": "#emailInnards"
}
]
},
"3": {
"name": "punctuation.definition.string.end.email-address"
}
}
}
]
},
"emailUnquoted": {
"name": "meta.email-address.unquoted",
"match": "(?x)\n((?!\\.) (?:[^\\[\\(<⟨«\"'\\s@.]|\\.(?!\\.))++ @\n([^\\[\\(<⟨«\"'\\s@.]+?\\.(?=[^\\.\\s])(?:[^\\[\\(<⟨«\"'\\s@.]|\\.(?!\\.))++))",
"captures": {
"1": {
"name": "string.unquoted.email-address",
"patterns": [
{
"include": "#emailInnards"
}
]
}
}
},
"emailInnards": {
"name": "constant.other.reference.link.underline.email",
"match": "(?:\\G|^|(?<=\\n)).+",
"captures": {
"0": {
"patterns": [
{
"match": "\\G([^@]*)(@)(.*)",
"captures": {
"1": {
"name": "meta.local-part"
},
"2": {
"name": "punctuation.separator.at-sign.email"
},
"3": {
"name": "meta.domain"
}
}
}
]
}
}
},
"esc": {
"name": "constant.character.escape.backslash",
"match": "(\\\\).",
"captures": {
"1": {
"name": "punctuation.definition.escape.backslash"
}
}
},
"eql": {
"name": "keyword.operator.assignment.key-value.equals-sign",
"match": "="
},
"float": {
"patterns": [
{
"include": "#floatExp"
},
{
"include": "#floatNoExp"
}
]
},
"floatExp": {
"name": "constant.numeric.float.real.decimal.dec.exponential.scientific",
"match": "[-+]?(?:[0-9]*\\.[0-9]+|[0-9]+\\.)(?:[eE][-+]?[0-9]+)++"
},
"floatNoExp": {
"name": "constant.numeric.float.real.decimal.dec",
"match": "[-+]?(?:[0-9]*\\.[0-9]+|[0-9]+\\.)++"
},
"hex": {
"name": "constant.numeric.integer.int.hexadecimal.hex",
"match": "[-+]?[A-Fa-f0-9]+"
},
"hexNoSign": {
"name": "constant.numeric.integer.int.hexadecimal.hex",
"match": "[A-Fa-f0-9]+"
},
"int": {
"patterns": [
{
"include": "#intExp"
},
{
"include": "#intNoExp"
}
]
},
"intExp": {
"name": "constant.numeric.integer.int.decimal.dec.exponential.scientific",
"match": "[-+]?[0-9]+[eE][-+]?[0-9]+"
},
"intNoExp": {
"name": "constant.numeric.integer.int.decimal.dec",
"match": "[-+]?[0-9]+"
},
"ip": {
"name": "constant.numeric.other.ip-address",
"match": "(?:\\d+\\.){3,}\\d+(?=\\s|$)",
"captures": {
"0": {
"patterns": [
{
"include": "#dot"
}
]
}
}
},
"kolon": {
"name": "keyword.operator.assignment.key-value.colon",
"match": ":"
},
"num": {
"patterns": [
{
"include": "#float"
},
{
"include": "#int"
}
]
},
"op": {
"patterns": [
{
"include": "#opBitAssign"
},
{
"include": "#opMathAssign"
},
{
"include": "#opBit"
},
{
"include": "#opFix"
},
{
"include": "#opCmp"
},
{
"include": "#opLog"
},
{
"include": "#opMath"
}
]
},
"opBit": {
"patterns": [
{
"match": "\\^",
"name": "keyword.operator.bitwise.xor"
},
{
"match": "~",
"name": "keyword.operator.bitwise.not"
},
{
"match": "&",
"name": "keyword.operator.bitwise.and"
},
{
"match": "\\|",
"name": "keyword.operator.bitwise.or"
},
{
"match": "<<",
"name": "keyword.operator.bitwise.shift.left"
},
{
"match": ">>>",
"name": "keyword.operator.bitwise.shift.right.unsigned"
},
{
"match": ">>",
"name": "keyword.operator.bitwise.shift.right.signed"
}
]
},
"opBitAssign": {
"patterns": [
{
"match": "\\^=",
"name": "keyword.operator.assignment.bitwise.xor"
},
{
"match": "~=",
"name": "keyword.operator.assignment.bitwise.not"
},
{
"match": "&=",
"name": "keyword.operator.assignment.bitwise.and"
},
{
"match": "\\|=",
"name": "keyword.operator.assignment.bitwise.or"
},
{
"match": "<<=",
"name": "keyword.operator.assignment.bitwise.shift.left"
},
{
"match": ">>>=",
"name": "keyword.operator.assignment.bitwise.shift.right.unsigned"
},
{
"match": ">>=",
"name": "keyword.operator.assignment.bitwise.shift.right.signed"
}
]
},
"opCmp": {
"patterns": [
{
"match": "<=>",
"name": "keyword.operator.logical.comparison.starship.spaceship"
},
{
"match": "<=",
"name": "keyword.operator.logical.comparison.less-than-or-equal-to.lte"
},
{
"match": "<",
"name": "keyword.operator.logical.comparison.less-than.lt"
},
{
"match": ">=",
"name": "keyword.operator.logical.comparison.greater-than-or-equal-to.gte"
},
{
"match": ">",
"name": "keyword.operator.logical.comparison.greater-than.gt"
},
{
"match": "===",
"name": "keyword.operator.logical.comparison.equal-to.equals.equal.eql.eq.strict"
},
{
"match": "==",
"name": "keyword.operator.logical.comparison.equal-to.equals.equal.eql.eq"
},
{
"match": "!==",
"name": "keyword.operator.logical.comparison.not-equal-to.not-equal.unequal.neql.ne.strict"
},
{
"match": "!=",
"name": "keyword.operator.logical.comparison.not-equal-to.not-equal.unequal.neql.ne"
}
]
},
"opFix": {
"patterns": [
{
"match": "\\+{2}",
"name": "keyword.operator.increment"
},
{
"match": "-{2}",
"name": "keyword.operator.decrement"
}
]
},
"opLog": {
"patterns": [
{
"match": "!!",
"name": "keyword.operator.logical.boolean.cast"
},
{
"match": "!",
"name": "keyword.operator.logical.boolean.not.negation.negate"
},
{
"match": "&&",
"name": "keyword.operator.logical.boolean.and"
},
{
"match": "\\|{2}",
"name": "keyword.operator.logical.boolean.or"
},
{
"match": "\\?{2}",
"name": "keyword.operator.logical.boolean.or.nullish"
}
]
},
"opMath": {
"patterns": [
{
"match": "\\*{2}|\\^",
"name": "keyword.operator.arithmetic.exponentiation.exponent.exp.power"
},
{
"match": "\\+",
"name": "keyword.operator.arithmetic.addition.add.plus"
},
{
"match": "\\*",
"name": "keyword.operator.arithmetic.multiplication.multiply.times"
},
{
"match": "/",
"name": "keyword.operator.arithmetic.division.divide"
},
{
"match": "%",
"name": "keyword.operator.arithmetic.remainder.modulo.modulus.mod"
},
{
"name": "keyword.operator.arithmetic.subtraction.subtract.minus",
"match": "[-֊־᐀᠆‐-―⸗⸚⸺⸻⹀〜〰゠︱︲﹘﹣-]"
}
]
},
"opMathAssign": {
"patterns": [
{
"match": "\\*{2}=|\\^=",
"name": "keyword.operator.assignment.arithmetic.exponentiation.exponent.exp.power"
},
{
"match": "\\+=",
"name": "keyword.operator.assignment.arithmetic.addition.add.plus"
},
{
"match": "\\*=",
"name": "keyword.operator.assignment.arithmetic.multiplication.multiply.times"
},
{
"match": "/=",
"name": "keyword.operator.assignment.arithmetic.division.divide"
},
{
"match": "%=",
"name": "keyword.operator.assignment.arithmetic.remainder.modulo.modulus.mod"
},
{
"name": "keyword.operator.assignment.arithmetic.subtraction.subtract.minus",
"match": "[-֊־᐀᠆‐-―⸗⸚⸺⸻⹀〜〰゠︱︲﹘﹣-]="
}
]
},
"semi": {
"name": "punctuation.delimiter.separator.semicolon",
"match": ";"
},
"str": {
"patterns": [
{
"include": "#strDouble"
},
{
"include": "#strSingle"
}
]
},
"strDouble": {
"name": "string.quoted.double",
"begin": "\"",
"end": "\"|(?=$)",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin"
}
},
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end"
}
},
"patterns": [
{
"include": "#esc"
}
]
},
"strSingle": {
"name": "string.quoted.single",
"begin": "'",
"end": "'|(?=$)",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin"
}
},
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end"
}
},
"patterns": [
{
"include": "#esc"
}
]
},
"tab": {
"patterns": [
{
"match": "^\\t+",
"captures": {
"0": {
"patterns": [
{
"match": "\\t",
"name": "punctuation.whitespace.leading.tab.hard-tab"
}
]
}
}
},
{
"match": "\\t+$",
"captures": {
"0": {
"patterns": [
{
"match": "\\t",
"name": "punctuation.whitespace.trailing.tab.hard-tab"
}
]
}
}
},
{
"match": "\\t",
"name": "punctuation.whitespace.tab.hard-tab"
}
]
},
"url": {
"patterns": [
{
"match": "(?x)\n(\"|'|\\b)\n(\n\t# Not part of official URL schemes, included here for convenience\n\t(?: (?:jdbc|mvn|odbc|view-source) :)?\n\n\t# Common protocols/URI schemes\n\t( https?\n\t| s?ftp\n\t| ftps\n\t| file\n\t| wss?\n\t| (?:git|svn) (?:\\+(?:https?|ssh))?\n\t| ssh\n\t\n\t# Less common URI schemes\n\t| aaas?\n\t| acap\n\t| adiumxtra\n\t| admin\n\t| afp\n\t| app\n\t| atom\n\t| aurora\n\t| aw\n\t| beshare\n\t| bolo\n\t| cassandra\n\t| chrome(?:-extension)?\n\t| coaps?\n\t| cockroach\n\t| content\n\t| couchbase\n\t| crid\n\t| cvs\n\t| dict\n\t| dns\n\t| docker\n\t| ed2k\n\t| facetime\n\t| feed\n\t| finger\n\t| fish\n\t| gemini\n\t| github(?:-(?:mac|linux|windows))?\n\t| gizmoproject\n\t| gopher\n\t| go\n\t| hcp\n\t| imap\n\t| irc[6s]?\n\t| issue\n\t| keyparc\n\t| lastfm\n\t| ldaps?\n\t| man(?:-?page)?\n\t| maria(?:db)?\n\t| market\n\t| message\n\t| mms\n\t| modern-?sqlite\n\t| mongodb\n\t| ms-help\n\t| mssql\n\t| mumble\n\t| my?sql\n\t| netezza\n\t| nfs\n\t| ni\n\t| nntp\n\t| notes\n\t| oleodbc\n\t| oracle\n\t| payto\n\t| pgsql\n\t| pg\n\t| pop\n\t| postgres(?:ql)?\n\t| postgresql\n\t| presto(?:dbs?|s)\n\t| reload\n\t| resource\n\t| res\n\t| rmi\n\t| rsync\n\t| rtmf?p\n\t| rtmp\n\t| s3\n\t| saphana\n\t| secondlife\n\t| sgn\n\t| shttp\n\t| slack\n\t| smb\n\t| snmp\n\t| soldat\n\t| sqlite3?\n\t| sqlserver\n\t| steam\n\t| stratum\\+[a-z]+\n\t| stuns?\n\t| teamspeak\n\t| telnet\n\t| turns?\n\t| txmt\n\t| udp\n\t| unreal\n\t| ut2004\n\t| ventrilo\n\t| vnc\n\t| wais\n\t| web\\+[a-z]+\n\t| webcal\n\t| wtai\n\t| wyciwyg\n\t| xmpp\n\t| xri\n\t| z39\\.50[rs]\n\t| zoommtg\n\t\n\t# User-defined/arbitrary URI scheme starting with `x-`\n\t| x(?:-[a-z][a-z0-9]*)++\n\t) ://\n\t\n\t# Path specifier\n\t(?:\n\t\t(?! \\#\\w*\\#)\n\t\t(?: [-:\\@\\w.,~%+_/?=&\\#;|!])\n\t)+\n\t\n\t# Don't include trailing punctuation\n\t(?<![-.,?:\\#;])\n)\n(\\1)",
"captures": {
"1": {
"name": "punctuation.definition.link.begin.url"
},
"2": {
"name": "constant.other.reference.link.underline.$3.url"
},
"4": {
"name": "punctuation.definition.link.end.url"
}
}
},
{
"match": "(?x)\n(\"|'|\\b)\n(\n\tmailto (:)\n\t(?:\n\t\t(?! \\#\\w*\\#)\n\t\t(?: [-:@\\w.,~%+_/?=&\\#;|!])\n\t)+\n\t(?<![-.,?:\\#;])\n)\n(\\1)",
"captures": {
"1": {
"name": "punctuation.definition.link.begin.url"
},
"2": {
"name": "constant.other.reference.link.underline.mailto.url"
},
"3": {
"name": "punctuation.separator.delimiter.scheme.url"
},
"4": {
"name": "punctuation.definition.link.end.url"
}
}
}
]
},
"version": {
"name": "constant.other.version-string",
"match": "(?x)\n(\"|'|\\b)\n([vV]?)\n(0 | [1-9]\\d*) (\\.)\n(0 | [1-9]\\d*) (\\.)\n(0 | [1-9]\\d*)\n(?:\n\t(-)\n\t(\n\t\t(?: 0\n\t\t| [1-9]\\d*\n\t\t| \\d*[a-zA-Z-][0-9a-zA-Z-]*\n\t\t)\n\t\t\n\t\t(?:\n\t\t\t\\.\n\t\t\t(?: 0\n\t\t\t| [1-9]\\d*\n\t\t\t| \\d*[a-zA-Z-][0-9a-zA-Z-]*\n\t\t\t)\n\t\t)*\n\t)\n)?\n(?:\n\t(\\+)\n\t(\n\t\t[0-9a-zA-Z-]+\n\t\t(?:\\.[0-9a-zA-Z-]+)*\n\t)\n)?\n(\\1)",
"captures": {
"1": {
"name": "punctuation.definition.version-string.begin"
},
"2": {
"name": "punctuation.definition.version-prefix"
},
"3": {
"name": "meta.major.release-number"
},
"4": {
"patterns": [
{
"include": "#dot"
}
]
},
"5": {
"name": "meta.minor.release-number"
},
"6": {
"patterns": [
{
"include": "#dot"
}
]
},
"7": {
"name": "meta.patch.release-number"
},
"8": {
"patterns": [
{
"include": "#dash"
}
]
},
"9": {
"name": "meta.prerelease.release-number",
"patterns": [
{
"include": "#dot"
}
]
},
"10": {
"name": "punctuation.delimiter.separator.plus"
},
"11": {
"name": "meta.build-metadata",
"patterns": [
{
"include": "#dot"
}
]
},
"12": {
"name": "punctuation.definition.version-string.end"
}
}
}
}
}
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist
PUBLIC '-//Apple Computer//DTD PLIST 1.0//EN'
'http://www.apple.com/DTDs/PropertyList-1.0.dtd'>
<plist version="1.0">
<dict>
<key>name</key>
<string>SmPL</string>
<key>scopeName</key>
<string>source.smpl</string>
<key>fileTypes</key>
<array>
<string>cocci</string>
</array>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#main</string>
</dict>
</array>
<key>repository</key>
<dict>
<key>main</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#comment</string>
</dict>
<dict>
<key>include</key>
<string>#include</string>
</dict>
<dict>
<key>include</key>
<string>#virtual</string>
</dict>
<dict>
<key>include</key>
<string>#control</string>
</dict>
<dict>
<key>include</key>
<string>#scripts</string>
</dict>
<dict>
<key>include</key>
<string>#metavariables</string>
</dict>
<dict>
<key>include</key>
<string>#variables</string>
</dict>
<dict>
<key>include</key>
<string>#lineAdded</string>
</dict>
<dict>
<key>include</key>
<string>#lineDeleted</string>
</dict>
<dict>
<key>include</key>
<string>#lineMatched</string>
</dict>
<dict>
<key>include</key>
<string>#when</string>
</dict>
</array>
</dict>
<key>comment</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>name</key>
<string>comment.line.triple-slash.smpl</string>
<key>begin</key>
<string>///</string>
<key>end</key>
<string>$</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.comment.smpl</string>
</dict>
</dict>
</dict>
<dict>
<key>name</key>
<string>comment.line.double-slash.smpl</string>
<key>begin</key>
<string>//</string>
<key>end</key>
<string>$</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.comment.smpl</string>
</dict>
</dict>
</dict>
</array>
</dict>
<key>control</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>name</key>
<string>storage.modifier.required.dots.smpl</string>
<key>match</key>
<string>&lt;\+(?=\.{3})|(?&lt;=\.{3})\+&gt;</string>
</dict>
<dict>
<key>name</key>
<string>storage.modifier.optional.dots.smpl</string>
<key>match</key>
<string>&lt;(?=\.{3})|(?&lt;=\.{3})&gt;</string>
</dict>
<dict>
<key>name</key>
<string>keyword.control.flow.dots.smpl</string>
<key>match</key>
<string>\.{3}</string>
</dict>
</array>
</dict>
<key>include</key>
<dict>
<key>name</key>
<string>meta.preprocessor.$1.smpl</string>
<key>match</key>
<string>^\s*(include|using)\s+(?:(&quot;[^&quot;]*&quot;)|(&lt;.*&gt;))</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.directive.$1.smpl</string>
</dict>
<key>2</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>etc#str</string>
</dict>
</array>
</dict>
<key>3</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#isoPath</string>
</dict>
</array>
</dict>
</dict>
</dict>
<key>isoPath</key>
<dict>
<key>name</key>
<string>string.quoted.other.lt-gt.include.smpl</string>
<key>begin</key>
<string>&lt;</string>
<key>end</key>
<string>&gt;</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.smpl</string>
</dict>
</dict>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.smpl</string>
</dict>
</dict>
</dict>
<key>lineAdded</key>
<dict>
<key>name</key>
<string>markup.inserted.diff.smpl</string>
<key>match</key>
<string>^(\+).*</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.inserted.diff.smpl</string>
</dict>
</dict>
</dict>
<key>lineDeleted</key>
<dict>
<key>name</key>
<string>markup.deleted.diff.smpl</string>
<key>match</key>
<string>^(-).*</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.deleted.diff.smpl</string>
</dict>
</dict>
</dict>
<key>lineMatched</key>
<dict>
<key>match</key>
<string>^(\*)\s*(\S.*)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.semantic-match.diff.smpl</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>markup.changed.diff.smpl</string>
</dict>
</dict>
</dict>
<key>metavariables</key>
<dict>
<key>name</key>
<string>meta.diff.header.metavariables.smpl</string>
<key>begin</key>
<string>^(@).*(@)\s*$</string>
<key>end</key>
<string>^(@@)</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>meta.diff.range.smpl</string>
</dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.range.diff.begin.smpl</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.definition.range.diff.end.smpl</string>
</dict>
</dict>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>meta.diff.range.smpl</string>
</dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.range.diff.smpl</string>
</dict>
</dict>
</dict>
<key>scripts</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>(^(@).*?(?&lt;=\s|@)(script|initialize|finalize):python(?=\s|@).*?(@)\s*$)</string>
<key>end</key>
<string>^(?=@(?!@\s*$))</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>meta.diff.header.metavariables.smpl</string>
</dict>
<key>1</key>
<dict>
<key>name</key>
<string>meta.diff.range.smpl</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.definition.range.diff.begin.smpl</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.definition.range.diff.end.smpl</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>name</key>
<string>meta.diff.header.metavariables.smpl</string>
<key>begin</key>
<string>^</string>
<key>end</key>
<string>^(@@)</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>meta.diff.range.smpl</string>
</dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.range.diff.smpl</string>
</dict>
</dict>
</dict>
<dict>
<key>begin</key>
<string>(?&lt;=@@)\s*$\n?</string>
<key>end</key>
<string>^(?=@)</string>
<key>contentName</key>
<string>source.embedded.python</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#comment</string>
</dict>
<dict>
<key>include</key>
<string>source.python</string>
</dict>
</array>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(^(@).*?(?&lt;=\s|@)(script|initialize|finalize):ocaml(?=\s|@).*?(@)\s*$)</string>
<key>end</key>
<string>^(?=@(?!@\s*$))</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>meta.diff.header.metavariables.smpl</string>
</dict>
<key>1</key>
<dict>
<key>name</key>
<string>meta.diff.range.smpl</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.definition.range.diff.begin.smpl</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.definition.range.diff.end.smpl</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>name</key>
<string>meta.diff.header.metavariables.smpl</string>
<key>begin</key>
<string>^</string>
<key>end</key>
<string>^(@@)</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>meta.diff.range.smpl</string>
</dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.range.diff.smpl</string>
</dict>
</dict>
</dict>
<dict>
<key>begin</key>
<string>(?&lt;=@@)\s*$\n?</string>
<key>end</key>
<string>^(?=@)</string>
<key>contentName</key>
<string>source.embedded.ocaml</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#comment</string>
</dict>
<dict>
<key>include</key>
<string>source.ocaml</string>
</dict>
</array>
</dict>
</array>
</dict>
</array>
</dict>
<key>variables</key>
<dict>
<key>name</key>
<string>variable.at-prefix.smpl</string>
<key>match</key>
<string>(?&lt;!^)(@)[\w]+</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.variable.smpl</string>
</dict>
</dict>
</dict>
<key>virtual</key>
<dict>
<key>match</key>
<string>^\s*(virtual)\s+(.*)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>storage.modifier.virtual.smpl</string>
</dict>
<key>2</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>[^\s,]+</string>
<key>name</key>
<string>entity.name.rule.smpl</string>
</dict>
<dict>
<key>include</key>
<string>etc#comma</string>
</dict>
</array>
</dict>
</dict>
</dict>
<key>when</key>
<dict>
<key>match</key>
<string>(?&lt;=\s|\.{3})(when)\s*(any(?:\s|$)|!=)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.flow.when.smpl</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>keyword.operator.comparison.smpl</string>
</dict>
</dict>
</dict>
</dict>
</dict>
</plist>
{
"name": "SmPL",
"scopeName": "source.smpl",
"fileTypes": [
"cocci"
],
"patterns": [
{
"include": "#main"
}
],
"repository": {
"main": {
"patterns": [
{
"include": "#comment"
},
{
"include": "#include"
},
{
"include": "#virtual"
},
{
"include": "#control"
},
{
"include": "#scripts"
},
{
"include": "#metavariables"
},
{
"include": "#variables"
},
{
"include": "#lineAdded"
},
{
"include": "#lineDeleted"
},
{
"include": "#lineMatched"
},
{
"include": "#when"
}
]
},
"comment": {
"patterns": [
{
"name": "comment.line.triple-slash.smpl",
"begin": "///",
"end": "$",
"beginCaptures": {
"0": {
"name": "punctuation.definition.comment.smpl"
}
}
},
{
"name": "comment.line.double-slash.smpl",
"begin": "//",
"end": "$",
"beginCaptures": {
"0": {
"name": "punctuation.definition.comment.smpl"
}
}
}
]
},
"control": {
"patterns": [
{
"name": "storage.modifier.required.dots.smpl",
"match": "<\\+(?=\\.{3})|(?<=\\.{3})\\+>"
},
{
"name": "storage.modifier.optional.dots.smpl",
"match": "<(?=\\.{3})|(?<=\\.{3})>"
},
{
"name": "keyword.control.flow.dots.smpl",
"match": "\\.{3}"
}
]
},
"include": {
"name": "meta.preprocessor.$1.smpl",
"match": "^\\s*(include|using)\\s+(?:(\"[^\"]*\")|(<.*>))",
"captures": {
"1": {
"name": "keyword.control.directive.$1.smpl"
},
"2": {
"patterns": [
{
"include": "etc#str"
}
]
},
"3": {
"patterns": [
{
"include": "#isoPath"
}
]
}
}
},
"isoPath": {
"name": "string.quoted.other.lt-gt.include.smpl",
"begin": "<",
"end": ">",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.smpl"
}
},
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.smpl"
}
}
},
"lineAdded": {
"name": "markup.inserted.diff.smpl",
"match": "^(\\+).*",
"captures": {
"1": {
"name": "punctuation.definition.inserted.diff.smpl"
}
}
},
"lineDeleted": {
"name": "markup.deleted.diff.smpl",
"match": "^(-).*",
"captures": {
"1": {
"name": "punctuation.definition.deleted.diff.smpl"
}
}
},
"lineMatched": {
"match": "^(\\*)\\s*(\\S.*)",
"captures": {
"1": {
"name": "keyword.operator.semantic-match.diff.smpl"
},
"2": {
"name": "markup.changed.diff.smpl"
}
}
},
"metavariables": {
"name": "meta.diff.header.metavariables.smpl",
"begin": "^(@).*(@)\\s*$",
"end": "^(@@)",
"beginCaptures": {
"0": {
"name": "meta.diff.range.smpl"
},
"1": {
"name": "punctuation.definition.range.diff.begin.smpl"
},
"2": {
"name": "punctuation.definition.range.diff.end.smpl"
}
},
"endCaptures": {
"0": {
"name": "meta.diff.range.smpl"
},
"1": {
"name": "punctuation.definition.range.diff.smpl"
}
}
},
"scripts": {
"patterns": [
{
"begin": "(^(@).*?(?<=\\s|@)(script|initialize|finalize):python(?=\\s|@).*?(@)\\s*$)",
"end": "^(?=@(?!@\\s*$))",
"beginCaptures": {
"0": {
"name": "meta.diff.header.metavariables.smpl"
},
"1": {
"name": "meta.diff.range.smpl"
},
"2": {
"name": "punctuation.definition.range.diff.begin.smpl"
},
"3": {
"name": "punctuation.definition.range.diff.end.smpl"
}
},
"patterns": [
{
"name": "meta.diff.header.metavariables.smpl",
"begin": "^",
"end": "^(@@)",
"endCaptures": {
"0": {
"name": "meta.diff.range.smpl"
},
"1": {
"name": "punctuation.definition.range.diff.smpl"
}
}
},
{
"begin": "(?<=@@)\\s*$\\n?",
"end": "^(?=@)",
"contentName": "source.embedded.python",
"patterns": [
{
"include": "#comment"
},
{
"include": "source.python"
}
]
}
]
},
{
"begin": "(^(@).*?(?<=\\s|@)(script|initialize|finalize):ocaml(?=\\s|@).*?(@)\\s*$)",
"end": "^(?=@(?!@\\s*$))",
"beginCaptures": {
"0": {
"name": "meta.diff.header.metavariables.smpl"
},
"1": {
"name": "meta.diff.range.smpl"
},
"2": {
"name": "punctuation.definition.range.diff.begin.smpl"
},
"3": {
"name": "punctuation.definition.range.diff.end.smpl"
}
},
"patterns": [
{
"name": "meta.diff.header.metavariables.smpl",
"begin": "^",
"end": "^(@@)",
"endCaptures": {
"0": {
"name": "meta.diff.range.smpl"
},
"1": {
"name": "punctuation.definition.range.diff.smpl"
}
}
},
{
"begin": "(?<=@@)\\s*$\\n?",
"end": "^(?=@)",
"contentName": "source.embedded.ocaml",
"patterns": [
{
"include": "#comment"
},
{
"include": "source.ocaml"
}
]
}
]
}
]
},
"variables": {
"name": "variable.at-prefix.smpl",
"match": "(?<!^)(@)[\\w]+",
"captures": {
"1": {
"name": "keyword.operator.variable.smpl"
}
}
},
"virtual": {
"match": "^\\s*(virtual)\\s+(.*)",
"captures": {
"1": {
"name": "storage.modifier.virtual.smpl"
},
"2": {
"patterns": [
{
"match": "[^\\s,]+",
"name": "entity.name.rule.smpl"
},
{
"include": "etc#comma"
}
]
}
}
},
"when": {
"match": "(?<=\\s|\\.{3})(when)\\s*(any(?:\\s|$)|!=)",
"captures": {
"1": {
"name": "keyword.control.flow.when.smpl"
},
"2": {
"name": "keyword.operator.comparison.smpl"
}
}
}
}
}
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist
PUBLIC '-//Apple Computer//DTD PLIST 1.0//EN'
'http://www.apple.com/DTDs/PropertyList-1.0.dtd'>
<plist version="1.0">
<dict>
<key>name</key>
<string>SmPL</string>
<key>scopeName</key>
<string>source.smpl</string>
<key>fileTypes</key>
<array>
<string>cocci</string>
</array>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#main</string>
</dict>
</array>
<key>repository</key>
<dict>
<key>main</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#comment</string>
</dict>
<dict>
<key>include</key>
<string>#include</string>
</dict>
<dict>
<key>include</key>
<string>#virtual</string>
</dict>
<dict>
<key>include</key>
<string>#control</string>
</dict>
<dict>
<key>include</key>
<string>#scripts</string>
</dict>
<dict>
<key>include</key>
<string>#metavariables</string>
</dict>
<dict>
<key>include</key>
<string>#variables</string>
</dict>
<dict>
<key>include</key>
<string>#lineAdded</string>
</dict>
<dict>
<key>include</key>
<string>#lineDeleted</string>
</dict>
<dict>
<key>include</key>
<string>#lineMatched</string>
</dict>
<dict>
<key>include</key>
<string>#when</string>
</dict>
</array>
</dict>
<key>comment</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>name</key>
<string>comment.line.triple-slash.smpl</string>
<key>begin</key>
<string>///</string>
<key>end</key>
<string>$</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.comment.smpl</string>
</dict>
</dict>
</dict>
<dict>
<key>name</key>
<string>comment.line.double-slash.smpl</string>
<key>begin</key>
<string>//</string>
<key>end</key>
<string>$</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.comment.smpl</string>
</dict>
</dict>
</dict>
</array>
</dict>
<key>control</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>name</key>
<string>storage.modifier.required.dots.smpl</string>
<key>match</key>
<string>&lt;\+(?=\.{3})|(?&lt;=\.{3})\+&gt;</string>
</dict>
<dict>
<key>name</key>
<string>storage.modifier.optional.dots.smpl</string>
<key>match</key>
<string>&lt;(?=\.{3})|(?&lt;=\.{3})&gt;</string>
</dict>
<dict>
<key>name</key>
<string>keyword.control.flow.dots.smpl</string>
<key>match</key>
<string>\.{3}</string>
</dict>
</array>
</dict>
<key>include</key>
<dict>
<key>name</key>
<string>meta.preprocessor.$1.smpl</string>
<key>match</key>
<string>^\s*(include|using)\s+(?:(&quot;[^&quot;]*&quot;)|(&lt;.*&gt;))</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.directive.$1.smpl</string>
</dict>
<key>2</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#str</string>
</dict>
</array>
</dict>
<key>3</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#isoPath</string>
</dict>
</array>
</dict>
</dict>
</dict>
<key>isoPath</key>
<dict>
<key>name</key>
<string>string.quoted.other.lt-gt.include.smpl</string>
<key>begin</key>
<string>&lt;</string>
<key>end</key>
<string>&gt;</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.smpl</string>
</dict>
</dict>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.smpl</string>
</dict>
</dict>
</dict>
<key>lineAdded</key>
<dict>
<key>name</key>
<string>markup.inserted.diff.smpl</string>
<key>match</key>
<string>^(\+).*</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.inserted.diff.smpl</string>
</dict>
</dict>
</dict>
<key>lineDeleted</key>
<dict>
<key>name</key>
<string>markup.deleted.diff.smpl</string>
<key>match</key>
<string>^(-).*</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.deleted.diff.smpl</string>
</dict>
</dict>
</dict>
<key>lineMatched</key>
<dict>
<key>match</key>
<string>^(\*)\s*(\S.*)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.semantic-match.diff.smpl</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>markup.changed.diff.smpl</string>
</dict>
</dict>
</dict>
<key>metavariables</key>
<dict>
<key>name</key>
<string>meta.diff.header.metavariables.smpl</string>
<key>begin</key>
<string>^(@).*(@)\s*$</string>
<key>end</key>
<string>^(@@)</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>meta.diff.range.smpl</string>
</dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.range.diff.begin.smpl</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.definition.range.diff.end.smpl</string>
</dict>
</dict>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>meta.diff.range.smpl</string>
</dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.range.diff.smpl</string>
</dict>
</dict>
</dict>
<key>scripts</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>(^(@).*?(?&lt;=\s|@)(script|initialize|finalize):python(?=\s|@).*?(@)\s*$)</string>
<key>end</key>
<string>^(?=@(?!@\s*$))</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>meta.diff.header.metavariables.smpl</string>
</dict>
<key>1</key>
<dict>
<key>name</key>
<string>meta.diff.range.smpl</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.definition.range.diff.begin.smpl</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.definition.range.diff.end.smpl</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>name</key>
<string>meta.diff.header.metavariables.smpl</string>
<key>begin</key>
<string>^</string>
<key>end</key>
<string>^(@@)</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>meta.diff.range.smpl</string>
</dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.range.diff.smpl</string>
</dict>
</dict>
</dict>
<dict>
<key>begin</key>
<string>(?&lt;=@@)\s*$\n?</string>
<key>end</key>
<string>^(?=@)</string>
<key>contentName</key>
<string>source.embedded.python</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#comment</string>
</dict>
<dict>
<key>include</key>
<string>source.python</string>
</dict>
</array>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(^(@).*?(?&lt;=\s|@)(script|initialize|finalize):ocaml(?=\s|@).*?(@)\s*$)</string>
<key>end</key>
<string>^(?=@(?!@\s*$))</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>meta.diff.header.metavariables.smpl</string>
</dict>
<key>1</key>
<dict>
<key>name</key>
<string>meta.diff.range.smpl</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.definition.range.diff.begin.smpl</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.definition.range.diff.end.smpl</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>name</key>
<string>meta.diff.header.metavariables.smpl</string>
<key>begin</key>
<string>^</string>
<key>end</key>
<string>^(@@)</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>meta.diff.range.smpl</string>
</dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.range.diff.smpl</string>
</dict>
</dict>
</dict>
<dict>
<key>begin</key>
<string>(?&lt;=@@)\s*$\n?</string>
<key>end</key>
<string>^(?=@)</string>
<key>contentName</key>
<string>source.embedded.ocaml</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#comment</string>
</dict>
<dict>
<key>include</key>
<string>source.ocaml</string>
</dict>
</array>
</dict>
</array>
</dict>
</array>
</dict>
<key>variables</key>
<dict>
<key>name</key>
<string>variable.at-prefix.smpl</string>
<key>match</key>
<string>(?&lt;!^)(@)[\w]+</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.variable.smpl</string>
</dict>
</dict>
</dict>
<key>virtual</key>
<dict>
<key>match</key>
<string>^\s*(virtual)\s+(.*)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>storage.modifier.virtual.smpl</string>
</dict>
<key>2</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>[^\s,]+</string>
<key>name</key>
<string>entity.name.rule.smpl</string>
</dict>
<dict>
<key>include</key>
<string>#comma</string>
</dict>
</array>
</dict>
</dict>
</dict>
<key>when</key>
<dict>
<key>match</key>
<string>(?&lt;=\s|\.{3})(when)\s*(any(?:\s|$)|!=)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.flow.when.smpl</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>keyword.operator.comparison.smpl</string>
</dict>
</dict>
</dict>
<key>comma</key>
<dict>
<key>name</key>
<string>punctuation.separator.delimiter.comma</string>
<key>match</key>
<string>,</string>
</dict>
<key>str</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#strDouble</string>
</dict>
<dict>
<key>include</key>
<string>#strSingle</string>
</dict>
</array>
</dict>
<key>strDouble</key>
<dict>
<key>name</key>
<string>string.quoted.double</string>
<key>begin</key>
<string>&quot;</string>
<key>end</key>
<string>&quot;|(?=$)</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin</string>
</dict>
</dict>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#esc</string>
</dict>
</array>
</dict>
<key>strSingle</key>
<dict>
<key>name</key>
<string>string.quoted.single</string>
<key>begin</key>
<string>'</string>
<key>end</key>
<string>'|(?=$)</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin</string>
</dict>
</dict>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#esc</string>
</dict>
</array>
</dict>
<key>esc</key>
<dict>
<key>name</key>
<string>constant.character.escape.backslash</string>
<key>match</key>
<string>(\\).</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.escape.backslash</string>
</dict>
</dict>
</dict>
</dict>
</dict>
</plist>
{
"name": "SmPL",
"scopeName": "source.smpl",
"fileTypes": [
"cocci"
],
"patterns": [
{
"include": "#main"
}
],
"repository": {
"main": {
"patterns": [
{
"include": "#comment"
},
{
"include": "#include"
},
{
"include": "#virtual"
},
{
"include": "#control"
},
{
"include": "#scripts"
},
{
"include": "#metavariables"
},
{
"include": "#variables"
},
{
"include": "#lineAdded"
},
{
"include": "#lineDeleted"
},
{
"include": "#lineMatched"
},
{
"include": "#when"
}
]
},
"comment": {
"patterns": [
{
"name": "comment.line.triple-slash.smpl",
"begin": "///",
"end": "$",
"beginCaptures": {
"0": {
"name": "punctuation.definition.comment.smpl"
}
}
},
{
"name": "comment.line.double-slash.smpl",
"begin": "//",
"end": "$",
"beginCaptures": {
"0": {
"name": "punctuation.definition.comment.smpl"
}
}
}
]
},
"control": {
"patterns": [
{
"name": "storage.modifier.required.dots.smpl",
"match": "<\\+(?=\\.{3})|(?<=\\.{3})\\+>"
},
{
"name": "storage.modifier.optional.dots.smpl",
"match": "<(?=\\.{3})|(?<=\\.{3})>"
},
{
"name": "keyword.control.flow.dots.smpl",
"match": "\\.{3}"
}
]
},
"include": {
"name": "meta.preprocessor.$1.smpl",
"match": "^\\s*(include|using)\\s+(?:(\"[^\"]*\")|(<.*>))",
"captures": {
"1": {
"name": "keyword.control.directive.$1.smpl"
},
"2": {
"patterns": [
{
"include": "#str"
}
]
},
"3": {
"patterns": [
{
"include": "#isoPath"
}
]
}
}
},
"isoPath": {
"name": "string.quoted.other.lt-gt.include.smpl",
"begin": "<",
"end": ">",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.smpl"
}
},
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.smpl"
}
}
},
"lineAdded": {
"name": "markup.inserted.diff.smpl",
"match": "^(\\+).*",
"captures": {
"1": {
"name": "punctuation.definition.inserted.diff.smpl"
}
}
},
"lineDeleted": {
"name": "markup.deleted.diff.smpl",
"match": "^(-).*",
"captures": {
"1": {
"name": "punctuation.definition.deleted.diff.smpl"
}
}
},
"lineMatched": {
"match": "^(\\*)\\s*(\\S.*)",
"captures": {
"1": {
"name": "keyword.operator.semantic-match.diff.smpl"
},
"2": {
"name": "markup.changed.diff.smpl"
}
}
},
"metavariables": {
"name": "meta.diff.header.metavariables.smpl",
"begin": "^(@).*(@)\\s*$",
"end": "^(@@)",
"beginCaptures": {
"0": {
"name": "meta.diff.range.smpl"
},
"1": {
"name": "punctuation.definition.range.diff.begin.smpl"
},
"2": {
"name": "punctuation.definition.range.diff.end.smpl"
}
},
"endCaptures": {
"0": {
"name": "meta.diff.range.smpl"
},
"1": {
"name": "punctuation.definition.range.diff.smpl"
}
}
},
"scripts": {
"patterns": [
{
"begin": "(^(@).*?(?<=\\s|@)(script|initialize|finalize):python(?=\\s|@).*?(@)\\s*$)",
"end": "^(?=@(?!@\\s*$))",
"beginCaptures": {
"0": {
"name": "meta.diff.header.metavariables.smpl"
},
"1": {
"name": "meta.diff.range.smpl"
},
"2": {
"name": "punctuation.definition.range.diff.begin.smpl"
},
"3": {
"name": "punctuation.definition.range.diff.end.smpl"
}
},
"patterns": [
{
"name": "meta.diff.header.metavariables.smpl",
"begin": "^",
"end": "^(@@)",
"endCaptures": {
"0": {
"name": "meta.diff.range.smpl"
},
"1": {
"name": "punctuation.definition.range.diff.smpl"
}
}
},
{
"begin": "(?<=@@)\\s*$\\n?",
"end": "^(?=@)",
"contentName": "source.embedded.python",
"patterns": [
{
"include": "#comment"
},
{
"include": "source.python"
}
]
}
]
},
{
"begin": "(^(@).*?(?<=\\s|@)(script|initialize|finalize):ocaml(?=\\s|@).*?(@)\\s*$)",
"end": "^(?=@(?!@\\s*$))",
"beginCaptures": {
"0": {
"name": "meta.diff.header.metavariables.smpl"
},
"1": {
"name": "meta.diff.range.smpl"
},
"2": {
"name": "punctuation.definition.range.diff.begin.smpl"
},
"3": {
"name": "punctuation.definition.range.diff.end.smpl"
}
},
"patterns": [
{
"name": "meta.diff.header.metavariables.smpl",
"begin": "^",
"end": "^(@@)",
"endCaptures": {
"0": {
"name": "meta.diff.range.smpl"
},
"1": {
"name": "punctuation.definition.range.diff.smpl"
}
}
},
{
"begin": "(?<=@@)\\s*$\\n?",
"end": "^(?=@)",
"contentName": "source.embedded.ocaml",
"patterns": [
{
"include": "#comment"
},
{
"include": "source.ocaml"
}
]
}
]
}
]
},
"variables": {
"name": "variable.at-prefix.smpl",
"match": "(?<!^)(@)[\\w]+",
"captures": {
"1": {
"name": "keyword.operator.variable.smpl"
}
}
},
"virtual": {
"match": "^\\s*(virtual)\\s+(.*)",
"captures": {
"1": {
"name": "storage.modifier.virtual.smpl"
},
"2": {
"patterns": [
{
"match": "[^\\s,]+",
"name": "entity.name.rule.smpl"
},
{
"include": "#comma"
}
]
}
}
},
"when": {
"match": "(?<=\\s|\\.{3})(when)\\s*(any(?:\\s|$)|!=)",
"captures": {
"1": {
"name": "keyword.control.flow.when.smpl"
},
"2": {
"name": "keyword.operator.comparison.smpl"
}
}
},
"comma": {
"name": "punctuation.separator.delimiter.comma",
"match": ","
},"str": {
"patterns": [
{
"include": "#strDouble"
},
{
"include": "#strSingle"
}
]
},
"strDouble": {
"name": "string.quoted.double",
"begin": "\"",
"end": "\"|(?=$)",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin"
}
},
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end"
}
},
"patterns": [
{
"include": "#esc"
}
]
},
"strSingle": {
"name": "string.quoted.single",
"begin": "'",
"end": "'|(?=$)",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin"
}
},
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end"
}
},
"patterns": [
{
"include": "#esc"
}
]
},
"esc": {
"name": "constant.character.escape.backslash",
"match": "(\\\\).",
"captures": {
"1": {
"name": "punctuation.definition.escape.backslash"
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment