<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
	<!-- TODO:
	Syntax types, tuple types, union
	take out '::Type' -->
<dict>
	<key>fileTypes</key>
	<array>
		<string>jl</string>
	</array>
	<key>firstLineMatch</key>
	<string>^#!.*\bjulia\s*$</string>
	<key>foldingStartMarker</key>
	<string>^\s*(?:if|while|for|begin|function|macro|module|baremodule|type|immutable|let)\b(?!.*\bend\b).*$</string>
	<key>foldingStopMarker</key>
	<string>^\s*(?:end)\b.*$</string>
	<key>name</key>
	<string>Julia</string>
	<key>patterns</key>
	<array>
		<dict>
			<key>include</key>
			<string>#bracket</string>
		</dict>
		<dict>
			<key>include</key>
			<string>#function_decl</string>
		</dict>
		<dict>
			<key>include</key>
			<string>#function_call</string>
		</dict>
		<dict>
			<key>include</key>
			<string>#type_decl</string>
		</dict>
		<dict>
			<key>include</key>
			<string>#keyword</string>
		</dict>
		<dict>
			<key>include</key>
			<string>#operator</string>
		</dict>
		<dict>
			<key>include</key>
			<string>#number</string>
		</dict>
		<dict>
			<key>include</key>
			<string>#string</string>
		</dict>
		<dict>
			<key>include</key>
			<string>#comment</string>
		</dict>
	</array>
	<key>repository</key>
	<dict>
		<key>bracket</key>
		<dict>
			<key>patterns</key>
			<array>
				<dict>
					<key>match</key>
					<string>(?:\(|\)|\[|\]|\{|\}|,)(?!('|(?:\.'))*\.?')</string>
					<key>name</key>
					<string>keyword.bracket.julia</string>
				</dict>
			</array>
		</dict>
		<key>comment</key>
		<dict>
			<key>patterns</key>
			<array>
				<dict>
					<key>captures</key>
					<dict>
						<key>1</key>
						<dict>
							<key>name</key>
							<string>punctuation.definition.comment.julia</string>
						</dict>
					</dict>
					<key>match</key>
					<string>(?&lt;!\$)(#)(?!\{).*$\n?</string>
					<key>name</key>
					<string>comment.line.number-sign.julia</string>
				</dict>
			</array>
		</dict>
		<key>function_call</key>
		<dict>
			<key>patterns</key>
			<array>
				<dict>
					<key>begin</key>
					<string>([a-zA-Z0-9_]+!?)\w*\(</string>
					<key>beginCaptures</key>
					<dict>
						<key>1</key>
						<dict>
							<key>name</key>
							<string>support.function.julia</string>
						</dict>
					</dict>
					<key>end</key>
					<string>\)(('|(\.'))*\.?')?</string>
					<key>endCaptures</key>
					<dict>
						<key>1</key>
						<dict>
							<key>name</key>
							<string>keyword.operator.transposed-func.julia</string>
						</dict>
					</dict>
					<key>patterns</key>
					<array>
						<dict>
							<key>include</key>
							<string>$self</string>
						</dict>
					</array>
				</dict>
			</array>
		</dict>
		<key>function_decl</key>
		<dict>
			<key>patterns</key>
			<array>
				<dict>
					<key>begin</key>
					<string>(function|macro)\s*([a-zA-Z0-9_\{]+!?)\w*([(\\{])</string>
					<key>beginCaptures</key>
					<dict>
						<key>1</key>
						<dict>
							<key>name</key>
							<string>keyword.other.julia</string>
						</dict>
						<key>2</key>
						<dict>
							<key>name</key>
							<string>entity.name.function.julia</string>
						</dict>
					</dict>
					<key>end</key>
					<string>([)\\}])</string>
					<key>name</key>
					<string>meta.function.julia</string>
					<key>patterns</key>
					<array>
						<dict>
							<key>include</key>
							<string>$self</string>
						</dict>
					</array>
				</dict>
			</array>
		</dict>
		<key>keyword</key>
		<dict>
			<key>patterns</key>
			<array>
				<dict>
					<key>match</key>
					<string>\b(?:function|type|immutable|macro|quote|abstract|bitstype|typealias|module|baremodule|new)\b</string>
					<key>name</key>
					<string>keyword.other.julia</string>
				</dict>
				<dict>
					<key>match</key>
					<string>\b(?:if|else|elseif|while|for|in|begin|let|end|do|try|catch|finally|return|break|continue)\b</string>
					<key>name</key>
					<string>keyword.control.julia</string>
				</dict>
				<dict>
					<key>match</key>
					<string>\b(?:global|local|const|export|import|importall|using)\b</string>
					<key>name</key>
					<string>storage.modifier.variable.julia</string>
				</dict>
				<dict>
					<key>match</key>
					<string>@\w+\b</string>
					<key>name</key>
					<string>variable.macro.julia</string>
				</dict>
			</array>
		</dict>
		<key>number</key>
		<dict>
			<key>patterns</key>
			<array>
				<dict>
					<key>match</key>
					<string>((\b0(x|X)[0-9a-fA-F]*)|((\b[0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]*)?(im)?|\bInf(32)?\b|\bNaN(32)?\b|\btrue\b|\bfalse\b)</string>
					<key>name</key>
					<string>constant.numeric.julia</string>
				</dict>
			</array>
		</dict>
		<key>operator</key>
		<dict>
			<key>patterns</key>
			<array>
				<dict>
					<key>match</key>
					<string>(?:=|:=|\+=|-=|\*=|/=|//=|\.//=|\.\*=|\\=|\.\\=|^=|\.^=|%=|\|=|&amp;=|\$=|&lt;&lt;=|&gt;&gt;=)</string>
					<key>name</key>
					<string>keyword.operator.update.julia</string>
				</dict>
				<dict>
					<key>match</key>
					<string>(?:\?|:)</string>
					<key>name</key>
					<string>keyword.operator.ternary.julia</string>
				</dict>
				<dict>
					<key>match</key>
					<string>(?:\|\||&amp;&amp;|!)</string>
					<key>name</key>
					<string>keyword.operator.boolean.julia</string>
				</dict>
				<dict>
					<key>match</key>
					<string>(?:-&gt;|&lt;-|--&gt;)</string>
					<key>name</key>
					<string>keyword.operator.arrow.julia</string>
				</dict>
				<dict>
					<key>match</key>
					<string>(?:&gt;|&lt;|&gt;=|&lt;=|==|!=|\.&gt;|\.&lt;|\.&gt;=|\.&gt;=|\.==|\.!=|\.=|\.!|&lt;:|:&gt;)</string>
					<key>name</key>
					<string>keyword.operator.relation.julia</string>
				</dict>
				<dict>
					<key>match</key>
					<string>(?::)</string>
					<key>name</key>
					<string>keyword.operator.range.julia</string>
				</dict>
				<dict>
					<key>match</key>
					<string>(?:&lt;&lt;|&gt;&gt;)</string>
					<key>name</key>
					<string>keyword.operator.shift.julia</string>
				</dict>
				<dict>
					<key>match</key>
					<string>(?:\||\&amp;|~)</string>
					<key>name</key>
					<string>keyword.operator.bitwise.julia</string>
				</dict>
				<dict>
					<key>match</key>
					<string>(?:\+|-|\*|\.\*|/|\./|//|\.//|%|\.%|\\|\.\\|\^|\.\^)</string>
					<key>name</key>
					<string>keyword.operator.arithmetic.julia</string>
				</dict>
				<dict>
					<key>match</key>
					<string>(?:::)</string>
					<key>name</key>
					<string>keyword.operator.isa.julia</string>
				</dict>
				<dict>
					<key>match</key>
					<string>(?:\.(?=[a-zA-Z])|\.\.+)</string>
					<key>name</key>
					<string>keyword.operator.dots.julia</string>
				</dict>
				<dict>
					<key>match</key>
					<string>(?:\$(?=.+))</string>
					<key>name</key>
					<string>keyword.operator.interpolation.julia</string>
				</dict>
				<dict>
					<key>captures</key>
					<dict>
						<key>1</key>
						<dict>
							<key>name</key>
							<string>variable</string>
						</dict>
						<key>2</key>
						<dict>
							<key>name</key>
							<string>keyword.operator.transposed-variable.julia</string>
						</dict>
					</dict>
					<key>match</key>
					<string>(\w+)(('|(\.'))*\.?')</string>
				</dict>
				<dict>
					<key>captures</key>
					<dict>
						<key>1</key>
						<dict>
							<key>name</key>
							<string>keyword.bracket.end.julia</string>
						</dict>
						<key>2</key>
						<dict>
							<key>name</key>
							<string>keyword.operator.transposed-matrix.julia</string>
						</dict>
					</dict>
					<key>match</key>
					<string>(\])((?:'|(?:\.'))*\.?')</string>
				</dict>
				<dict>
					<key>captures</key>
					<dict>
						<key>1</key>
						<dict>
							<key>name</key>
							<string>keyword.bracket.end.julia</string>
						</dict>
						<key>2</key>
						<dict>
							<key>name</key>
							<string>keyword.operator.transposed-parens.julia</string>
						</dict>
					</dict>
					<key>match</key>
					<string>(\))((?:'|(?:\.'))*\.?')</string>
				</dict>
			</array>
		</dict>
		<key>string</key>
		<dict>
			<key>patterns</key>
			<array>
				<dict>
					<key>begin</key>
					<string>'</string>
					<key>beginCaptures</key>
					<dict>
						<key>0</key>
						<dict>
							<key>name</key>
							<string>punctuation.definition.string.begin.julia</string>
						</dict>
					</dict>
					<key>end</key>
					<string>'</string>
					<key>endCaptures</key>
					<dict>
						<key>0</key>
						<dict>
							<key>name</key>
							<string>punctuation.definition.string.end.julia</string>
						</dict>
					</dict>
					<key>name</key>
					<string>string.quoted.single.julia</string>
					<key>patterns</key>
					<array>
						<dict>
							<key>include</key>
							<string>#string_escaped_char</string>
						</dict>
					</array>
				</dict>
				<dict>
					<key>begin</key>
					<string>"</string>
					<key>beginCaptures</key>
					<dict>
						<key>0</key>
						<dict>
							<key>name</key>
							<string>punctuation.definition.string.begin.julia</string>
						</dict>
					</dict>
					<key>end</key>
					<string>"</string>
					<key>endCaptures</key>
					<dict>
						<key>0</key>
						<dict>
							<key>name</key>
							<string>punctuation.definition.string.end.julia</string>
						</dict>
					</dict>
					<key>name</key>
					<string>string.quoted.double.julia</string>
					<key>patterns</key>
					<array>
						<dict>
							<key>include</key>
							<string>#string_escaped_char</string>
						</dict>
					</array>
				</dict>
				<dict>
					<key>begin</key>
					<string>\b\w+"</string>
					<key>beginCaptures</key>
					<dict>
						<key>0</key>
						<dict>
							<key>name</key>
							<string>punctuation.definition.string.begin.julia</string>
						</dict>
					</dict>
					<key>end</key>
					<string>"\w*</string>
					<key>endCaptures</key>
					<dict>
						<key>0</key>
						<dict>
							<key>name</key>
							<string>punctuation.definition.string.end.julia</string>
						</dict>
					</dict>
					<key>name</key>
					<string>string.quoted.custom-double.julia</string>
					<key>patterns</key>
					<array>
						<dict>
							<key>include</key>
							<string>#string_custom_escaped_char</string>
						</dict>
					</array>
				</dict>
				<dict>
					<key>begin</key>
					<string>`</string>
					<key>beginCaptures</key>
					<dict>
						<key>0</key>
						<dict>
							<key>name</key>
							<string>punctuation.definition.string.begin.julia</string>
						</dict>
					</dict>
					<key>end</key>
					<string>`</string>
					<key>endCaptures</key>
					<dict>
						<key>0</key>
						<dict>
							<key>name</key>
							<string>punctuation.definition.string.end.julia</string>
						</dict>
					</dict>
					<key>name</key>
					<string>string.quoted.backtick.julia</string>
					<key>patterns</key>
					<array>
						<dict>
							<key>include</key>
							<string>#string_escaped_char</string>
						</dict>
					</array>
				</dict>
			</array>
		</dict>
		<key>string_custom_escaped_char</key>
		<dict>
			<key>patterns</key>
			<array>
				<dict>
					<key>match</key>
					<string>\\"</string>
					<key>name</key>
					<string>constant.character.escape.julia</string>
				</dict>
			</array>
		</dict>
		<key>string_escaped_char</key>
		<dict>
			<key>patterns</key>
			<array>
				<dict>
					<key>match</key>
					<string>\\(\\|[0-3]\d{,2}|[4-7]\d?|x[a-fA-F0-9]{,2}|u[a-fA-F0-9]{,4}|U[a-fA-F0-9]{,8}|.)</string>
					<key>name</key>
					<string>constant.character.escape.julia</string>
				</dict>
			</array>
		</dict>
		<key>type_decl</key>
		<dict>
			<key>patterns</key>
			<array>
				<dict>
					<key>captures</key>
					<dict>
						<key>1</key>
						<dict>
							<key>name</key>
							<string>keyword.control.type.julia</string>
						</dict>
						<key>2</key>
						<dict>
							<key>name</key>
							<string>entity.name.type.julia</string>
						</dict>
						<key>3</key>
						<dict>
							<key>name</key>
							<string>entity.other.inherited-class.julia</string>
						</dict>
						<key>4</key>
						<dict>
							<key>name</key>
							<string>punctuation.separator.inheritance.julia</string>
						</dict>
					</dict>
					<key>match</key>
					<string>(type|immutable)\s+([a-zA-Z0-9_]+)(\s*(&lt;:)\s*[.a-zA-Z0-9_:]+)?</string>
					<key>name</key>
					<string>meta.type.julia</string>
				</dict>
				<dict>
					<key>captures</key>
					<dict>
						<key>2</key>
						<dict>
							<key>name</key>
							<string>support.type.julia</string>
						</dict>
					</dict>
					<key>comments</key>
					<string>Matches a typed variable, such as 'id::String'</string>
					<key>match</key>
					<string>([a-zA-Z0-9_]+)(::([a-zA-Z0-9_]+|\(.*\))(\{.*\})?)</string>
					<key>name</key>
					<string>other.typed-variable.julia</string>
				</dict>
			</array>
		</dict>
	</dict>
	<key>scopeName</key>
	<string>source.julia</string>
	<key>uuid</key>
	<string>F5D95417-DF9F-48AD-92DF-21CE62F7C31B</string>
</dict>
</plist>
