{
	"scopeName": "source.chuck",
	"name": "ChucK",
	"fileTypes": [
	  "ck"
	],
	"patterns": [
	  {
		"captures": {
		  "0": {
			"name": "punctuation.definition.comment.chuck"
		  }
		},
		"match": "/\\*\\*/",
		"name": "comment.block.empty.chuck"
	  },
	  {
		"begin": "/\\*",
		"captures": {
		  "0": {
			"name": "punctuation.definition.comment.chuck"
		  }
		},
		"end": "\\*/",
		"name": "comment.block.chuck"
	  },
	  {
		"begin": "(^[ \\t]+)?(?=//|<\\-\\-)",
		"beginCaptures": {
		  "1": {
			"name": "punctuation.whitespace.comment.leading.chuck"
		  }
		},
		"end": "(?!\\G)",
		"patterns": [
		  {
			"begin": "//|<\\-\\-",
			"beginCaptures": {
			  "0": {
				"name": "punctuation.definition.comment.chuck"
			  }
			},
			"end": "\\n",
			"name": "comment.line.double-slash.chuck"
		  }
		]
	  },
	  {
		"begin": "\"",
		"beginCaptures": {
		  "0": {
			"name": "punctuation.definition.string.begin.chuck"
		  }
		},
		"end": "\"",
		"endCaptures": {
		  "0": {
			"name": "punctuation.definition.string.end.chuck"
		  }
		},
		"name": "string.quoted.double.chuck",
		"patterns": [
		  {
			"name": "constant.character.escape.chuck",
			"match": "\\\\."
		  }
		]
	  },
	  {
		"match": "<<<|>>>",
		"name": "support.function.debug.chuck"
	  },
	  {
		"match": "\\b(int|float|time|dur|void|same|complex|polar|string|global)\\b",
		"name": "storage.type.chuck"
	  },
	  {
		"match": "\\b(if|else|while|until|for|repeat|break|continue|return|switch|do)\\b",
		"name": "keyword.control.chuck"
	  },
	  {
		"match": "\\b(class|interface)\\b",
		"name": "storage.type.class.chuck"
	  },
	  {
		"match": "\\b(extends|public|static|pure|implements|protected|private)\\b",
		"name": "storage.modifier.class.chuck"
	  },
	  {
		"match": "\\b(this|super)\\b",
		"name": "variable.language.chuck"
	  },
	  {
		"match": "\\b(function|fun|spork|const|new)\\b",
		"name": "keyword.control.chuck"
	  },
	  {
		"match": "\\b(now|true|false|maybe|null|NULL|me|samp|ms|second|minute|hour|day|week|chout|cherr|dac|adc|blackhole)\\b",
		"name": "constant.special.chuck"
	  },
	  {
		"match": "\\b(\\d+|pi)\\b",
		"name": "constant.numeric.chuck"
	  },
	  {
		"match": "=>|=<|@=>|\\+=>|\\-=>|\\*=>|\\/=>|%=>|\\+\\+|\\+|\\-\\-|\\-|\\*|\\/(?!\\/)|%|==|!=|<=|>=|<<|>>|<|>|&&|\\|\\||&|\\||\\^|\\$|::",
		"name": "keyword.operator.chuck"
	  },
	  {
		"match": "\\b(UGen|SinOsc|PulseOsc|SqrOsc|TriOsc|SawOsc|Phasor|Noise|Impulse|Step|Gain|SndBuf2?|HalfRect|FullRect|Mix2|Pan2|GenX|CurveTable|WarpTable|LiSa|Envelope|ADSR|Delay|DelayA|DelayL|Echo|JCRev|NRev|PRCRev|Chorus|Modulate|PitShift|SubNoise|Blit|BlitSaw|BlitSquare|WvIn|WaveLoop|WvOut|OneZero|TwoZero|OnePole|TwoPole|PoleZero|BiQuad|Filter|LPF|HPF|BPF|BRF|ResonZ|Dyno|StkInstrument|BandedWG|BlowBotl|BlowHole|Bowed|Brass|Clarinet|Flute|Mandolin|ModalBar|Moog|Saxofony|Shakers|Sitar|StifKarp|VoicForm|FM|BeeThree|FMVoices|HevyMetl|PercFlut|Rhodey|TubeBell|Wurley|UGen_Multi|UGen_Stereo|Chubgraph|Chugen|FilterBasic|FilterStk|LiSa10|Gen5|Gen7|Gen9|Gen10|Gen17|CNoise|BLT)\\b",
		"name": "support.class.ugen.chuck"
	  },
	  {
		"match": "\\b(UAna|UAnaBlob|Windowing|FFT|IFFT|DCT|IDCT|Centroid|Flux|RMS|RollOff|ZeroX|FeatureCollector|Flip|pilF|AutoCorr|XCorr)\\b",
		"name": "support.class.uana.chuck"
	  },
	  {
		"match": "\\b(Std|Machine|Math|Shred|RegEx|Object)\\b",
		"name": "support.class.library.chuck"
	  },
	  {
		"match": "\\b(Event|MidiIn|MidiMsg|OscRecv|OscEvent|Hid|HidMsg|MidiOut|OscOut|OscIn|OscMsg)\\b",
		"name": "support.class.event.chuck"
	  },
	  {
		"match": "\\b(IO|FileIO|StdOut|StdErr|SerialIO|MidiFileIn|KBHit)\\b",
		"name": "support.class.io.chuck"
	  },
	  {
		"match": "\\b(ABSaturator|AmbPan3|Binaural|Bitcrusher|Elliptic|ExpDelay|ExpEnv|Faust|FluidSynth|FoldbackSaturator|GVerb|KasFilter|LADSPA|MagicSine|Mesh2D|Multicomb|NHHall|Overdrive|Pan4|Pan8|Pan16|Perlin|PitchTrack|PowerADSR|Random|Sigmund|Spectacle|Wavetable|WinFuncEnv|WPDiodeLadder|WPKorg35)\\b",
		"name": "support.class.chugin.chuck"
	  },
	  {
		"match": "(\\.)\\s*([a-zA-Z_$][\\w$]*)",
		"captures": {
		  "2": {
			"name": "entity.name.function.chuck"
		  }
		}
	  },
	  {
		"match": "([A-Za-z_$][\\w$]*)\\s*(\\()",
		"captures": {
		  "1": {
			"name": "entity.name.function.chuck"
		  }
		}
	  }
	]
  }
  