<?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">
<dict>
	<key>comment</key>
	<string>JavaScript Syntax: version 2.0</string>
	<key>fileTypes</key>
	<array>
		<string>js</string>
		<string>htc</string>
		<string>jsx</string>
	</array>
	<key>injections</key>
	<dict>
		<key>source.js - meta.ternary-if.js - string - comment</key>
		<dict>
			<key>patterns</key>
			<array>
				<dict>
					<key>match</key>
					<string>(?&lt;!\w)[\p{L}\p{Nl}$_][\p{L}\p{Nl}$\p{Mn}\p{Mc}\p{Nd}\p{Pc}\x{200C}\x{200D}]*(?=\s*:\s*function\b)</string>
					<key>name</key>
					<string>entity.name.function.js</string>
				</dict>
				<dict>
					<key>match</key>
					<string>(?&lt;!\w)[\p{L}\p{Nl}$_][\p{L}\p{Nl}$\p{Mn}\p{Mc}\p{Nd}\p{Pc}\x{200C}\x{200D}]*(?=\s*:)</string>
					<key>name</key>
					<string>entity.name.attribute-name.js</string>
				</dict>
			</array>
		</dict>
	</dict>
	<key>keyEquivalent</key>
	<string>^~J</string>
	<key>name</key>
	<string>JavaScript</string>
	<key>patterns</key>
	<array>
		<dict>
			<key>captures</key>
			<dict>
				<key>1</key>
				<dict>
					<key>name</key>
					<string>punctuation.definition.comment.js</string>
				</dict>
			</dict>
			<key>comment</key>
			<string>Match the shebang for JavaScript executables</string>
			<key>match</key>
			<string>\A(#!).*$\n</string>
			<key>name</key>
			<string>comment.line.number-sign.shebang.js</string>
		</dict>
		<dict>
			<key>begin</key>
			<string>(?x)
			(?:
				(?&lt;!\w)																		# Ensure word boundry
				([\p{L}\p{Nl}$_][\p{L}\p{Nl}$\p{Mn}\p{Mc}\p{Nd}\p{Pc}\x{200C}\x{200D}]*)	# Identifier
				\s*(=)\s*
			)?																				# Optional
			\b(function)
			(?:\s*
				(\*)																		# Optional generator notation
			)?																				# (ECMAScript 6)
			(?:\s*
				(?&lt;=[\s\*])
				([\p{L}\p{Nl}$_][\p{L}\p{Nl}$\p{Mn}\p{Mc}\p{Nd}\p{Pc}\x{200C}\x{200D}]*)	# Optional Name
			)?
			\s*(\()
			</string>
			<key>beginCaptures</key>
			<dict>
				<key>1</key>
				<dict>
					<key>name</key>
					<string>meta.function.variable.js</string>
				</dict>
				<key>2</key>
				<dict>
					<key>name</key>
					<string>keyword.operator.js</string>
				</dict>
				<key>3</key>
				<dict>
					<key>name</key>
					<string>storage.type.function.js</string>
				</dict>
				<key>4</key>
				<dict>
					<key>name</key>
					<string>storage.modifier.js</string>
				</dict>
				<key>5</key>
				<dict>
					<key>name</key>
					<string>entity.name.function.js</string>
				</dict>
				<key>6</key>
				<dict>
					<key>name</key>
					<string>punctuation.definition.parameters.begin.js</string>
				</dict>
			</dict>
			<key>comment</key>
			<string>Match function, optional function name and optional function arguments</string>
			<key>end</key>
			<string>(\))</string>
			<key>endCaptures</key>
			<dict>
				<key>1</key>
				<dict>
					<key>name</key>
					<string>punctuation.definition.parameters.end.js</string>
				</dict>
			</dict>
			<key>name</key>
			<string>meta.function.js</string>
			<key>patterns</key>
			<array>
				<dict>
					<key>include</key>
					<string>#function-params</string>
				</dict>
			</array>
		</dict>
		<dict>
			<key>match</key>
			<string>\b0[xX]\h+\b</string>
			<key>name</key>
			<string>constant.numeric.hex.js</string>
		</dict>
		<dict>
			<key>match</key>
			<string>(?x)
				(?&lt;!\w)									# Ensure word boundry
				(?&gt;
					(
						(0|[1-9][0-9]*)(\.[0-9]*)?		# 0 or 1 or 1. or 1.0
					  | \.[0-9]+						# .1
					)
					([eE][+-]?[0-9]+)?					# Exponent
				)
				(?!\w)									# Ensure word boundry
			</string>
			<key>name</key>
			<string>constant.numeric.js</string>
		</dict>
		<dict>
			<key>begin</key>
			<string>'</string>
			<key>beginCaptures</key>
			<dict>
				<key>0</key>
				<dict>
					<key>name</key>
					<string>punctuation.definition.string.begin.js</string>
				</dict>
			</dict>
			<key>end</key>
			<string>'</string>
			<key>endCaptures</key>
			<dict>
				<key>0</key>
				<dict>
					<key>name</key>
					<string>punctuation.definition.string.end.js</string>
				</dict>
			</dict>
			<key>name</key>
			<string>string.quoted.single.js</string>
			<key>patterns</key>
			<array>
				<dict>
					<key>match</key>
					<string>\\(x\h{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)</string>
					<key>name</key>
					<string>constant.character.escape.js</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.js</string>
				</dict>
			</dict>
			<key>end</key>
			<string>"</string>
			<key>endCaptures</key>
			<dict>
				<key>0</key>
				<dict>
					<key>name</key>
					<string>punctuation.definition.string.end.js</string>
				</dict>
			</dict>
			<key>name</key>
			<string>string.quoted.double.js</string>
			<key>patterns</key>
			<array>
				<dict>
					<key>match</key>
					<string>\\(x\h{2}|[0-2][0-7]{0,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)</string>
					<key>name</key>
					<string>constant.character.escape.js</string>
				</dict>
			</array>
		</dict>
		<dict>
			<key>begin</key>
			<string>/\*</string>
			<key>captures</key>
			<dict>
				<key>0</key>
				<dict>
					<key>name</key>
					<string>punctuation.definition.comment.js</string>
				</dict>
			</dict>
			<key>end</key>
			<string>\*/</string>
			<key>name</key>
			<string>comment.block.js</string>
		</dict>
		<dict>
			<key>begin</key>
			<string>(^[ \t]+)?(?=//)</string>
			<key>beginCaptures</key>
			<dict>
				<key>1</key>
				<dict>
					<key>name</key>
					<string>punctuation.whitespace.comment.leading.js</string>
				</dict>
			</dict>
			<key>end</key>
			<string>(?!\G)</string>
			<key>patterns</key>
			<array>
				<dict>
					<key>begin</key>
					<string>//</string>
					<key>beginCaptures</key>
					<dict>
						<key>0</key>
						<dict>
							<key>name</key>
							<string>punctuation.definition.comment.js</string>
						</dict>
					</dict>
					<key>end</key>
					<string>\n</string>
					<key>name</key>
					<string>comment.line.double-slash.js</string>
				</dict>
			</array>
		</dict>
		<dict>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(let|var)\b(?!\$)</string>
			<key>name</key>
			<string>storage.type.js</string>
		</dict>
		<dict>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(get|set)\b(?!\$)</string>
			<key>name</key>
			<string>storage.modifier.js</string>
		</dict>
		<dict>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(break|case|catch|continue|default|do|else|finally|for|if|return|switch|throw|try|while|yield)\b(?!\$)</string>
			<key>name</key>
			<string>keyword.control.js</string>
		</dict>
		<dict>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(delete|in|instanceof|new|typeof|void|with)\b(?!\$)</string>
			<key>name</key>
			<string>keyword.operator.js</string>
		</dict>
		<dict>
			<key>match</key>
			<string>!|%|&amp;|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|&lt;=|&gt;=|&lt;&lt;=|&gt;&gt;=|&gt;&gt;&gt;=|&lt;&gt;|&lt;|&gt;|!|&amp;&amp;|\|\||\?\:|\*=|(?&lt;!\()/=|%=|\+=|\-=|&amp;=|\^=</string>
			<key>name</key>
			<string>keyword.operator.js</string>
		</dict>
		<dict>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(debugger)\b(?!\$)</string>
			<key>name</key>
			<string>keyword.other.js</string>
		</dict>
		<dict>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(Array|Boolean|Date|Error|EvalError|Function|Number|Object|RangeError|ReferenceError|RegExp|String|SyntaxError|TypeError|URIError)\b(?!\$)</string>
			<key>name</key>
			<string>support.class.js</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>DOM Core Level 4 (http://www.w3.org/TR/domcore/) and DOM Events Level 3 (http://www.w3.org/TR/DOM-Level-3-Events/)</string>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(Attr|CharacterData|Comment|CompositionEvent|CustomEvent|Document|DocumentFragment|DocumentType|DOMError|DOMException|DOMImplementation|DOMParser|DOMString|DOMTimestamp|DOMSettableTokenList|DOMStringList|DOMTokenList|Element|Event|EventTarget|FocusEvent|HTMLCollection|KeyboardEvent|MouseEvent|MutationObserver|MutationRecord|Node|NodeFilter|NodeIterator|NodeList|ProcessingInstruction|Range|Text|TextEvent|TreeWalker|UIEvent|WheelEvent|XMLDocument)\b(?!\$)</string>
			<key>name</key>
			<string>support.class.dom.js</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>DOM Core Level 4 (http://www.w3.org/TR/domcore/) and DOM Events Level 3 (http://www.w3.org/TR/DOM-Level-3-Events/)</string>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(CDATASection|DOMConfiguration|DOMErrorHandler|DOMImplementationList|DOMImplementationSource|DOMLocator|DOMObject|DOMUserData|Entity|EntityReference|MutationEvent|NamedNodeMap|NameList|Notation|TypeInfo|UserDataHandler)\b(?!\$)</string>
			<key>name</key>
			<string>invalid.deprecated.dom.js</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>TypedArray specification used by HTML 5 (http://www.khronos.org/registry/typedarray/specs/latest/)</string>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(ArrayBuffer|DataView|Float32Array|Float64Array|Int8Array|Int16Array|Int32Array|TypedArray|Uint8Array|Uint16Array|Uint32Array|Uint8ClampedArray)\b(?!\$)</string>
			<key>name</key>
			<string>support.class.dom.js</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>File specification used by HTML 5 (http://dev.w3.org/2006/webapi/FileAPI/)</string>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(Blob|File|FileList|FileReader)\b(?!\$)</string>
			<key>name</key>
			<string>support.class.dom.js</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>XMLHttpRequest specification used by HTML 5 (http://xhr.spec.whatwg.org/)</string>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(FormData|ProgressEvent|XMLHttpRequest|XMLHttpRequestUpload)\b(?!\$)</string>
			<key>name</key>
			<string>support.class.dom.js</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>EventSource specification used by HTML 5 (http://www.w3.org/TR/eventsource/)</string>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(EventSource)\b(?!\$)</string>
			<key>name</key>
			<string>support.class.dom.js</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>CSSOM specification used by HTML 5 (http://dev.w3.org/csswg/cssom/)</string>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(CSS|CSSCharsetRule|CSSImportRule|CSSPageRule|CSSRule|CSSRuleList|CSSStyleDeclaration|CSSStyleRule|CSSStyleSheet|MediaList|Stylesheet|StyleSheetList)\b(?!\$)</string>
			<key>name</key>
			<string>support.class.dom.js</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>CSSOM View specification used by HTML 5 (http://dev.w3.org/csswg/cssom-view/)</string>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(Screen)\b(?!\$)</string>
			<key>name</key>
			<string>support.class.dom.js</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>CSS Font specification used by HTML 5 (http://dev.w3.org/csswg/css-fonts/)</string>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(CSSFontFaceRule)\b(?!\$)</string>
			<key>name</key>
			<string>support.class.dom.js</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>SVG specification used by HTML 5 (http://www.w3.org/TR/SVG/single-page.html)</string>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(SVGAElement|SVGAltGlyphDefElement|SVGAltGlyphElement|SVGAltGlyphItemElement|SVGAngle|SVGAnimateColorElement|SVGAnimateElement|SVGAnimateMotionElement|SVGAnimateTransformElement|SVGAnimatedAngle|SVGAnimatedBoolean|SVGAnimatedEnumeration|SVGAnimatedInteger|SVGAnimatedLength|SVGAnimatedLengthList|SVGAnimatedNumber|SVGAnimatedNumberList|SVGAnimatedPreserveAspectRatio|SVGAnimatedRect|SVGAnimatedString|SVGAnimatedTransformList|SVGAnimationElement|SVGCircleElement|SVGClipPathElement|SVGColor|SVGComponentTransferFunctionElement|SVGCursorElement|SVGDefsElement|SVGDescElement|SVGDocument|SVGElement|SVGElementInstance|SVGElementInstanceList|SVGEllipseElement|SVGFEBlendElement|SVGFEColorMatrixElement|SVGFEComponentTransferElement|SVGFECompositeElement|SVGFEConvolveMatrixElement|SVGFEDiffuseLightingElement|SVGFEDisplacementMapElement|SVGFEDistantLightElement|SVGFEFloodElement|SVGFEFuncAElement|SVGFEFuncBElement|SVGFEFuncGElement|SVGFEFuncRElement|SVGFEGaussianBlurElement|SVGFEImageElement|SVGFEMergeElement|SVGFEMergeNodeElement|SVGFEMorphologyElement|SVGFEOffsetElement|SVGFEPointLightElement|SVGFESpecularLightingElement|SVGFESpotLightElement|SVGFETileElement|SVGFETurbulenceElement|SVGFilterElement|SVGFontElement|SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement|SVGForeignObjectElement|SVGGElement|SVGGlyphElement|SVGGlyphRefElement|SVGGradientElement|SVGHKernElement|SVGImageElement|SVGLength|SVGLengthList|SVGLineElement|SVGLinearGradientElement|SVGMPathElement|SVGMarkerElement|SVGMaskElement|SVGMatrix|SVGMetadataElement|SVGMissingGlyphElement|SVGNumber|SVGNumberList|SVGPaint|SVGPathElement|SVGPathSeg|SVGPathSegArcAbs|SVGPathSegArcRel|SVGPathSegClosePath|SVGPathSegCurvetoCubicAbs|SVGPathSegCurvetoCubicRel|SVGPathSegCurvetoCubicSmoothAbs|SVGPathSegCurvetoCubicSmoothRel|SVGPathSegCurvetoQuadraticAbs|SVGPathSegCurvetoQuadraticRel|SVGPathSegCurvetoQuadraticSmoothAbs|SVGPathSegCurvetoQuadraticSmoothRel|SVGPathSegLinetoAbs|SVGPathSegLinetoHorizontalAbs|SVGPathSegLinetoHorizontalRel|SVGPathSegLinetoRel|SVGPathSegLinetoVerticalAbs|SVGPathSegLinetoVerticalRel|SVGPathSegList|SVGPathSegMovetoAbs|SVGPathSegMovetoRel|SVGPatternElement|SVGPoint|SVGPointList|SVGPolygonElement|SVGPolylineElement|SVGPreserveAspectRatio|SVGRadialGradientElement|SVGRect|SVGRectElement|SVGRenderingIntent|SVGSVGElement|SVGScriptElement|SVGSetElement|SVGStopElement|SVGStringList|SVGStyleElement|SVGSwitchElement|SVGSymbolElement|SVGTRefElement|SVGTSpanElement|SVGTextContentElement|SVGTextElement|SVGTextPathElement|SVGTextPositioningElement|SVGTitleElement|SVGTransform|SVGTransformList|SVGUnitTypes|SVGUseElement|SVGUseElement|SVGVKernElement|SVGViewElement|SVGViewSpec|SVGZoomEvent)\b(?!\$)</string>
			<key>name</key>
			<string>support.class.dom.js</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>WebGL specification used by HTML 5 (http://www.khronos.org/registry/webgl/specs/latest/1.0/)</string>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(WebGLActiveInfo|WebGLBuffer|WebGLContextEvent|WebGLFramebuffer|WebGLProgram|WebGLRenderbuffer|WebGLRenderingContext|WebGLShader|WebGLShaderPrecisionFormat|WebGLTexture|WebGLUniformLocation)\b(?!\$)</string>
			<key>name</key>
			<string>support.class.dom.js</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>HTML 5 (http://www.w3.org/TR/html5/single-page.html)</string>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(Audio|BarProp|DOMStringMap|ErrorEvent|FileError|HTMLAllCollection|HTMLAnchorElement|HTMLAppletElement|HTMLAreaElement|HTMLAudioElement|HTMLBRElement|HTMLBaseElement|HTMLBodyElement|HTMLButtonElement|HTMLCanvasElement|HTMLDListElement|HTMLDataElement|HTMLDataListElement|HTMLDetailsElement|HTMLDialogElement|HTMLDirectoryElement|HTMLDivElement|HTMLEmbedElement|HTMLFieldSetElement|HTMLFontElement|HTMLFormControlsCollection|HTMLFormElement|HTMLFrameElement|HTMLFrameSetElement|HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLIFrameElement|HTMLImageElement|HTMLInputElement|HTMLKeygenElement|HTMLLIElement|HTMLLabelElement|HTMLLegendElement|HTMLLinkElement|HTMLMapElement|HTMLMarqueeElement|HTMLMediaElement|HTMLMetaElement|HTMLMeterElement|HTMLModElement|HTMLOListElement|HTMLObjectElement|HTMLOptGroupElement|HTMLOptionElement|HTMLOptionsCollection|HTMLOutputElement|HTMLParagraphElement|HTMLParamElement|HTMLPreElement|HTMLProgressElement|HTMLQuoteElement|HTMLScriptElement|HTMLSelectElement|HTMLSour|HTMLSpanElement|HTMLStyleElement|HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableDataCellElement|HTMLTableElement|HTMLTableHeaderCellElement|HTMLTableRowElement|HTMLTableSectionElement|HTMLTextAreaElement|HTMLTimeElement|HTMLTitleElement|HTMLTrackElement|HTMLUListElement|HTMLUnknownElement|HTMLVideoElement|HashChangeEvent|History|Image|Location|MediaController|MediaError|MouseEvent|Navigator|Option|PageTransitionEvent|PopStateEvent|TextTrack|TextTrackCue|TextTrackCueList|TextTrackList|TimeRanges|TrackEvent|UIEvent|ValidityState|Window)\b(?!\$)</string>
			<key>name</key>
			<string>support.class.dom.js</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>HTML 5 (http://www.w3.org/TR/html5/single-page.html#window)</string>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(applicationCache|closed|console|crypto|document|external|frameElement|frames|history|innerHeight|innerWidth|length|location|locationbar|menubar|name|navigator|offscreenBuffering|onabort|onafterprint|onbeforeprint|onbeforeunload|onblur|oncancel|oncanplay|oncanplaythrough|onchange|onclick|onclose|oncuechange|ondblclick|ondrag|ondragend|ondragenter|ondragexit|ondragleave|ondragover|ondragstart|ondrop|ondurationchange|onemptied|onended|onerror|onfocus|onhashchange|oninput|oninvalid|onkeydown|onkeypress|onkeyup|onload|onloadeddata|onloadedmetadata|onloadstart|onmessage|onmousedown|onmouseenter|onmouseleave|onmousemove|onmouseout|onmouseover|onmouseup|onmousewheel|onoffline|ononline|onpagehide|onpageshow|onpause|onplay|onplaying|onpopstate|onprogress|onratechange|onreset|onresize|onscroll|onseeked|onseeking|onselect|onshow|onstalled|onstorage|onsubmit|onsuspend|ontimeupdate|onunload|onvolumechange|onwaiting|opener|outerHeight|outerWidth|pageXOffset|pageYOffset|parent|personalbar|postMessage|screen|screenX|screenY|scrollbars|scrollX|scrollY|self|status|statusbar|toolbar|top|window)\b(?!\$)</string>
			<key>name</key>
			<string>support.constant.dom.js</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>HTML 5 (http://www.w3.org/TR/html5/single-page.html#window)</string>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(addEventListener|alert|atob|blur|btoa|clearInterval|clearTimeout|close|confirm|dispatchEvent|doNotTrack|find|focus|getComputedStyle|getMatchedCSSRules|getSelection|matchMedia|moveBy|moveTo|open|openDatabase|print|prompt|removeEventListener|resizeBy|resizeTo|scroll|scrollBy|scrollTo|setInterval|setTimeout|showModalDialog|stop)\b(?!\$)</string>
			<key>name</key>
			<string>support.function.dom.js</string>
		</dict>
		<dict>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(captureEvents|defaultStatus|defaultstatus|releaseEvents)\b(?!\$)</string>
			<key>name</key>
			<string>invalid.deprecated.dom.js</string>
		</dict>
		<dict>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(JSON|Math)\b(?!\$)</string>
			<key>name</key>
			<string>support.constant.js</string>
		</dict>
		<dict>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|uneval)\b(?!\$)</string>
			<key>name</key>
			<string>support.function.js</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>Keywords reserved for future use but now are unused.</string>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(class|const|enum|export|extends|import|super)\b(?!\$)</string>
			<key>name</key>
			<string>invalid.illegal.js</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>Keywords reserved for future use in strict mode but now are unused.</string>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(implements|interface|package|private|protected|public|static)\b(?!\$)</string>
			<key>name</key>
			<string>invalid.deprecated.js</string>
		</dict>
		<dict>
			<key>match</key>
			<string>\b(false|Infinity|NaN|null|true|undefined)\b</string>
			<key>name</key>
			<string>constant.language.js</string>
		</dict>
		<dict>
			<key>match</key>
			<string>(?&lt;!\.|\$)\b(this)\b(?!\$)</string>
			<key>name</key>
			<string>variable.language.js</string>
		</dict>
		<dict>
			<key>begin</key>
			<string>(?&lt;=[=(:,]|^|return|&amp;&amp;|\|\||!|\?)\s*(?=/[^/*+?])</string>
			<key>comment</key>
			<string>Dont scope preceding whitespace as string.regex</string>
			<key>end</key>
			<string>(?&lt;=[/igm])</string>
			<key>patterns</key>
			<array>
				<dict>
					<key>begin</key>
					<string>/</string>
					<key>beginCaptures</key>
					<dict>
						<key>1</key>
						<dict>
							<key>name</key>
							<string>punctuation.definition.string.begin.js</string>
						</dict>
					</dict>
					<key>end</key>
					<string>(/)[igm]*</string>
					<key>endCaptures</key>
					<dict>
						<key>1</key>
						<dict>
							<key>name</key>
							<string>punctuation.definition.string.end.js</string>
						</dict>
					</dict>
					<key>name</key>
					<string>string.regexp.js</string>
					<key>patterns</key>
					<array>
						<dict>
							<key>include</key>
							<string>source.js.regexp</string>
						</dict>
					</array>
				</dict>
			</array>
		</dict>
		<dict>
			<key>match</key>
			<string>\;</string>
			<key>name</key>
			<string>punctuation.terminator.statement.js</string>
		</dict>
		<dict>
			<key>captures</key>
			<dict>
				<key>1</key>
				<dict>
					<key>name</key>
					<string>punctuation.section.scope.begin.js</string>
				</dict>
				<key>2</key>
				<dict>
					<key>name</key>
					<string>punctuation.section.scope.end.js</string>
				</dict>
			</dict>
			<key>comment</key>
			<string>Allows the special return snippet to fire.</string>
			<key>match</key>
			<string>(\{)(\})</string>
		</dict>
		<dict>
			<key>captures</key>
			<dict>
				<key>1</key>
				<dict>
					<key>name</key>
					<string>punctuation.section.scope.begin.js</string>
				</dict>
				<key>2</key>
				<dict>
					<key>name</key>
					<string>punctuation.section.scope.end.js</string>
				</dict>
			</dict>
			<key>comment</key>
			<string>Allows the special return snippet to fire.</string>
			<key>match</key>
			<string>(\()(\))</string>
		</dict>
		<dict>
			<key>captures</key>
			<dict>
				<key>1</key>
				<dict>
					<key>name</key>
					<string>punctuation.section.scope.begin.js</string>
				</dict>
				<key>2</key>
				<dict>
					<key>name</key>
					<string>punctuation.section.scope.end.js</string>
				</dict>
			</dict>
			<key>comment</key>
			<string>Allows the special return snippet to fire.</string>
			<key>match</key>
			<string>(\[)(\])</string>
		</dict>
		<dict>
			<key>match</key>
			<string>\{|\}</string>
			<key>name</key>
			<string>meta.brace.curly.js</string>
		</dict>
		<dict>
			<key>match</key>
			<string>\(|\)</string>
			<key>name</key>
			<string>meta.brace.round.js</string>
		</dict>
		<dict>
			<key>match</key>
			<string>\[|\]</string>
			<key>name</key>
			<string>meta.brace.square.js</string>
		</dict>
		<dict>
			<key>begin</key>
			<string>\?</string>
			<key>end</key>
			<string>:</string>
			<key>name</key>
			<string>meta.ternary-if.js</string>
			<key>patterns</key>
			<array>
				<dict>
					<key>include</key>
					<string>$self</string>
				</dict>
			</array>
		</dict>
		<dict>
			<key>comment</key>
			<string>Match classes based on the usage of the "new" operator.</string>
			<key>match</key>
			<string>(?&lt;=new )([\p{L}\p{Nl}$_][\p{L}\p{Nl}$\p{Mn}\p{Mc}\p{Nd}\p{Pc}\x{200C}\x{200D}]*)(?!\w)</string>
			<key>name</key>
			<string>support.class.js</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>Match classes based on the usage of the "instanceof" operator.</string>
			<key>match</key>
			<string>(?&lt;= instanceof )([\p{L}\p{Nl}$_][\p{L}\p{Nl}$\p{Mn}\p{Mc}\p{Nd}\p{Pc}\x{200C}\x{200D}]*)(?!\w)</string>
			<key>name</key>
			<string>support.class.js</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>Match classes based on the usage of the "prototype" property.</string>
			<key>match</key>
			<string>(?&lt;!\w)([\p{L}\p{Nl}$_][\p{L}\p{Nl}$\p{Mn}\p{Mc}\p{Nd}\p{Pc}\x{200C}\x{200D}]*)(?=\.prototype\b)</string>
			<key>name</key>
			<string>support.class.js</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>Matches the "prototype" keyword.  Even though it is not a valid keyword, it is a special constant of sorts.</string>
			<key>match</key>
			<string>(?&lt;=\.)(prototype)\b</string>
			<key>name</key>
			<string>keyword.other.js</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>Matches the function calls.</string>
			<key>match</key>
			<string>(?&lt;!\w)([\p{L}\p{Nl}$_][\p{L}\p{Nl}$\p{Mn}\p{Mc}\p{Nd}\p{Pc}\x{200C}\x{200D}]*)(?=\()</string>
			<key>name</key>
			<string>meta.function.js</string>
		</dict>
	</array>
	<key>repository</key>
	<dict>
		<key>function-params</key>
		<dict>
			<key>patterns</key>
			<array>
				<dict>
					<key>begin</key>
					<string>(?=[\p{L}\p{Nl}$_])</string>
					<key>comment</key>
					<string>Matches valid argument, function and variable names.  To be thorough: https://github.com/mathiasbynens/mothereff.in/tree/master/js-variables</string>
					<key>end</key>
					<string>(?=[,)])</string>
					<key>patterns</key>
					<array>
						<dict>
							<key>match</key>
							<string>\G[\p{L}\p{Nl}$_][\p{L}\p{Nl}$\p{Mn}\p{Mc}\p{Nd}\p{Pc}\x{200C}\x{200D}]*</string>
							<key>name</key>
							<string>variable.parameter.function.js</string>
						</dict>
					</array>
				</dict>
			</array>
		</dict>
	</dict>
	<key>scopeName</key>
	<string>source.js</string>
	<key>uuid</key>
	<string>93E017CC-6F27-11D9-90EB-000D93589AF6</string>
</dict>
</plist>

