/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
'use strict';

import 'vs/languages/sass/common/sass.contribution';
import SASS = require('vs/languages/sass/common/sass');
import modesUtil = require('vs/editor/test/common/modesUtil');
import Modes = require('vs/editor/common/modes');
import * as sassTokenTypes from 'vs/languages/sass/common/sassTokenTypes';

suite('Sass Colorizer', () => {

	var tokenizationSupport: Modes.ITokenizationSupport;
	var assertOnEnter: modesUtil.IOnEnterAsserter;

	setup((done) => {
		modesUtil.load('sass').then(mode => {
			tokenizationSupport = mode.tokenizationSupport;
			assertOnEnter = modesUtil.createOnEnterAsserter(mode.getId(), mode.richEditSupport);
			done();
		});
	});

	test('', () => {
		modesUtil.executeTests(tokenizationSupport, [
			// Nested Rules
			[{
			line: '#main {\n  width: 97%;\n  p, div {\n    font-size: 2em;\n    a { font-weight: bold; }\n  }\n  pre { font-size: 3em; }\n}',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 5, type: '' },
				{ startIndex: 6, type: 'punctuation.curly.sass' },
				{ startIndex: 7, type: '' },
				{ startIndex: 10, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 16, type: '' },
				{ startIndex: 17, type: 'constant.numeric.sass' },
				{ startIndex: 20, type: 'punctuation.sass' },
				{ startIndex: 21, type: '' },
				{ startIndex: 24, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 25, type: 'punctuation.sass' },
				{ startIndex: 26, type: '' },
				{ startIndex: 27, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 30, type: '' },
				{ startIndex: 31, type: 'punctuation.curly.sass' },
				{ startIndex: 32, type: '' },
				{ startIndex: 37, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 47, type: '' },
				{ startIndex: 48, type: 'constant.numeric.sass' },
				{ startIndex: 51, type: 'punctuation.sass' },
				{ startIndex: 52, type: '' },
				{ startIndex: 57, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 58, type: '' },
				{ startIndex: 59, type: 'punctuation.curly.sass' },
				{ startIndex: 60, type: '' },
				{ startIndex: 61, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 73, type: '' },
				{ startIndex: 74, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 78, type: 'punctuation.sass' },
				{ startIndex: 79, type: '' },
				{ startIndex: 80, type: 'punctuation.curly.sass' },
				{ startIndex: 81, type: '' },
				{ startIndex: 84, type: 'punctuation.curly.sass' },
				{ startIndex: 85, type: '' },
				{ startIndex: 88, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 91, type: '' },
				{ startIndex: 92, type: 'punctuation.curly.sass' },
				{ startIndex: 93, type: '' },
				{ startIndex: 94, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 104, type: '' },
				{ startIndex: 105, type: 'constant.numeric.sass' },
				{ startIndex: 108, type: 'punctuation.sass' },
				{ startIndex: 109, type: '' },
				{ startIndex: 110, type: 'punctuation.curly.sass' },
				{ startIndex: 111, type: '' },
				{ startIndex: 112, type: 'punctuation.curly.sass' }
			]}],

			// Parent selector
			[{
			line: '#main {\n  color: black;\n  a {\n    font-weight: bold;\n    &:hover { color: red; }\n  }\n}',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 5, type: '' },
				{ startIndex: 6, type: 'punctuation.curly.sass' },
				{ startIndex: 7, type: '' },
				{ startIndex: 10, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 16, type: '' },
				{ startIndex: 17, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 22, type: 'punctuation.sass' },
				{ startIndex: 23, type: '' },
				{ startIndex: 26, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 27, type: '' },
				{ startIndex: 28, type: 'punctuation.curly.sass' },
				{ startIndex: 29, type: '' },
				{ startIndex: 34, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 46, type: '' },
				{ startIndex: 47, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 51, type: 'punctuation.sass' },
				{ startIndex: 52, type: '' },
				{ startIndex: 57, type: sassTokenTypes.TOKEN_SELECTOR_TAG + '.sass' },
				{ startIndex: 58, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 64, type: '' },
				{ startIndex: 65, type: 'punctuation.curly.sass' },
				{ startIndex: 66, type: '' },
				{ startIndex: 67, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 73, type: '' },
				{ startIndex: 74, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 77, type: 'punctuation.sass' },
				{ startIndex: 78, type: '' },
				{ startIndex: 79, type: 'punctuation.curly.sass' },
				{ startIndex: 80, type: '' },
				{ startIndex: 83, type: 'punctuation.curly.sass' },
				{ startIndex: 84, type: '' },
				{ startIndex: 85, type: 'punctuation.curly.sass' }
			]}],

			// Nested Properties
			[{
			line: '.funky {\n  font: 2px/3px {\n    family: fantasy;\n    size: 30em;\n    weight: bold;\n  }\n  color: black;\n}',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 6, type: '' },
				{ startIndex: 7, type: 'punctuation.curly.sass' },
				{ startIndex: 8, type: '' },
				{ startIndex: 11, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 16, type: '' },
				{ startIndex: 17, type: 'constant.numeric.sass' },
				{ startIndex: 20, type: 'keyword.operator.sass' },
				{ startIndex: 21, type: 'constant.numeric.sass' },
				{ startIndex: 24, type: '' },
				{ startIndex: 25, type: 'punctuation.curly.sass' },
				{ startIndex: 26, type: '' },
				{ startIndex: 31, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 38, type: '' },
				{ startIndex: 39, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 46, type: 'punctuation.sass' },
				{ startIndex: 47, type: '' },
				{ startIndex: 52, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 57, type: '' },
				{ startIndex: 58, type: 'constant.numeric.sass' },
				{ startIndex: 62, type: 'punctuation.sass' },
				{ startIndex: 63, type: '' },
				{ startIndex: 68, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 75, type: '' },
				{ startIndex: 76, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 80, type: 'punctuation.sass' },
				{ startIndex: 81, type: '' },
				{ startIndex: 84, type: 'punctuation.curly.sass' },
				{ startIndex: 85, type: '' },
				{ startIndex: 88, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 94, type: '' },
				{ startIndex: 95, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 100, type: 'punctuation.sass' },
				{ startIndex: 101, type: '' },
				{ startIndex: 102, type: 'punctuation.curly.sass' }
			]}],

			// Nesting name conflicts
			[{
			line: 'tr.default {\n  foo: { // properties\n    foo : 1;\n  }\n  foo: 1px; // rule\n  foo.bar { // selector\n    foo : 1;\n  }\n  foo:bar { // selector\n    foo : 1;\n  }\n  foo: 1px; // rule\n}',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 10, type: '' },
				{ startIndex: 11, type: 'punctuation.curly.sass' },
				{ startIndex: 12, type: '' },
				{ startIndex: 15, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 19, type: '' },
				{ startIndex: 20, type: 'punctuation.curly.sass' },
				{ startIndex: 21, type: '' },
				{ startIndex: 22, type: 'comment.sass' },
				{ startIndex: 35, type: '' },
				{ startIndex: 40, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 45, type: '' },
				{ startIndex: 46, type: 'constant.numeric.sass' },
				{ startIndex: 47, type: 'punctuation.sass' },
				{ startIndex: 48, type: '' },
				{ startIndex: 51, type: 'punctuation.curly.sass' },
				{ startIndex: 52, type: '' },
				{ startIndex: 55, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 59, type: '' },
				{ startIndex: 60, type: 'constant.numeric.sass' },
				{ startIndex: 63, type: 'punctuation.sass' },
				{ startIndex: 64, type: '' },
				{ startIndex: 65, type: 'comment.sass' },
				{ startIndex: 72, type: '' },
				{ startIndex: 75, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 82, type: '' },
				{ startIndex: 83, type: 'punctuation.curly.sass' },
				{ startIndex: 84, type: '' },
				{ startIndex: 85, type: 'comment.sass' },
				{ startIndex: 96, type: '' },
				{ startIndex: 101, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 106, type: '' },
				{ startIndex: 107, type: 'constant.numeric.sass' },
				{ startIndex: 108, type: 'punctuation.sass' },
				{ startIndex: 109, type: '' },
				{ startIndex: 112, type: 'punctuation.curly.sass' },
				{ startIndex: 113, type: '' },
				{ startIndex: 116, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 123, type: '' },
				{ startIndex: 124, type: 'punctuation.curly.sass' },
				{ startIndex: 125, type: '' },
				{ startIndex: 126, type: 'comment.sass' },
				{ startIndex: 137, type: '' },
				{ startIndex: 142, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 147, type: '' },
				{ startIndex: 148, type: 'constant.numeric.sass' },
				{ startIndex: 149, type: 'punctuation.sass' },
				{ startIndex: 150, type: '' },
				{ startIndex: 153, type: 'punctuation.curly.sass' },
				{ startIndex: 154, type: '' },
				{ startIndex: 157, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 161, type: '' },
				{ startIndex: 162, type: 'constant.numeric.sass' },
				{ startIndex: 165, type: 'punctuation.sass' },
				{ startIndex: 166, type: '' },
				{ startIndex: 167, type: 'comment.sass' },
				{ startIndex: 174, type: '' },
				{ startIndex: 175, type: 'punctuation.curly.sass' }
			]}],

			// Missing semicolons
			[{
			line: 'tr.default {\n  foo.bar {\n    $foo: 1px\n  }\n  foo: {\n    foo : white\n  }\n  foo.bar1 {\n    @extend tr.default\n  }\n  foo.bar2 {\n    @import "compass"\n  }\n  bar: black\n}',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 10, type: '' },
				{ startIndex: 11, type: 'punctuation.curly.sass' },
				{ startIndex: 12, type: '' },
				{ startIndex: 15, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 22, type: '' },
				{ startIndex: 23, type: 'punctuation.curly.sass' },
				{ startIndex: 24, type: '' },
				{ startIndex: 29, type: 'variable.decl.sass' },
				{ startIndex: 34, type: '' },
				{ startIndex: 35, type: 'constant.numeric.sass' },
				{ startIndex: 38, type: '' },
				{ startIndex: 41, type: 'punctuation.curly.sass' },
				{ startIndex: 42, type: '' },
				{ startIndex: 45, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 49, type: '' },
				{ startIndex: 50, type: 'punctuation.curly.sass' },
				{ startIndex: 51, type: '' },
				{ startIndex: 56, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 61, type: '' },
				{ startIndex: 62, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 67, type: '' },
				{ startIndex: 70, type: 'punctuation.curly.sass' },
				{ startIndex: 71, type: '' },
				{ startIndex: 74, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 82, type: '' },
				{ startIndex: 83, type: 'punctuation.curly.sass' },
				{ startIndex: 84, type: '' },
				{ startIndex: 89, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 96, type: '' },
				{ startIndex: 97, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 107, type: '' },
				{ startIndex: 110, type: 'punctuation.curly.sass' },
				{ startIndex: 111, type: '' },
				{ startIndex: 114, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 122, type: '' },
				{ startIndex: 123, type: 'punctuation.curly.sass' },
				{ startIndex: 124, type: '' },
				{ startIndex: 129, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 136, type: '' },
				{ startIndex: 137, type: 'string.punctuation.sass' },
				{ startIndex: 138, type: 'string.sass' },
				{ startIndex: 145, type: 'string.punctuation.sass' },
				{ startIndex: 146, type: '' },
				{ startIndex: 149, type: 'punctuation.curly.sass' },
				{ startIndex: 150, type: '' },
				{ startIndex: 153, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 157, type: '' },
				{ startIndex: 158, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 163, type: '' },
				{ startIndex: 164, type: 'punctuation.curly.sass' }
			]}],

			// Rules without whitespaces
			[{
			line: 'legend {foo{a:s}margin-top:0;margin-bottom:#123;margin-top:s(1)}',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 6, type: '' },
				{ startIndex: 7, type: 'punctuation.curly.sass' },
				{ startIndex: 8, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 11, type: 'punctuation.curly.sass' },
				{ startIndex: 12, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 14, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 15, type: 'punctuation.curly.sass' },
				{ startIndex: 16, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 27, type: 'constant.numeric.sass' },
				{ startIndex: 28, type: 'punctuation.sass' },
				{ startIndex: 29, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 43, type: 'constant.rgb-value.sass' },
				{ startIndex: 47, type: 'punctuation.sass' },
				{ startIndex: 48, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 59, type: 'support.function.name.sass' },
				{ startIndex: 61, type: 'constant.numeric.sass' },
				{ startIndex: 62, type: 'support.function.name.sass' },
				{ startIndex: 63, type: 'punctuation.curly.sass' }
			]}],

			// Extended comments
			[{
			line: '/* extended comment syntax */\n/* This comment is\n * several lines long.\n * since it uses the CSS comment syntax,\n * it will appear in the CSS output. */\nbody { color: black; }\n\n// These comments are only one line long each.\n// They won\'t appear in the CSS output,\n// since they use the single-line comment syntax.\na { color: green; }',
			tokens: [
				{ startIndex: 0, type: 'comment.sass' },
				{ startIndex: 29, type: '' },
				{ startIndex: 30, type: 'comment.sass' },
				{ startIndex: 48, type: '' },
				{ startIndex: 49, type: 'comment.sass' },
				{ startIndex: 71, type: '' },
				{ startIndex: 72, type: 'comment.sass' },
				{ startIndex: 112, type: '' },
				{ startIndex: 113, type: 'comment.sass' },
				{ startIndex: 152, type: '' },
				{ startIndex: 153, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 157, type: '' },
				{ startIndex: 158, type: 'punctuation.curly.sass' },
				{ startIndex: 159, type: '' },
				{ startIndex: 160, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 166, type: '' },
				{ startIndex: 167, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 172, type: 'punctuation.sass' },
				{ startIndex: 173, type: '' },
				{ startIndex: 174, type: 'punctuation.curly.sass' },
				{ startIndex: 175, type: '' },
				{ startIndex: 177, type: 'comment.sass' },
				{ startIndex: 223, type: '' },
				{ startIndex: 224, type: 'comment.sass' },
				{ startIndex: 263, type: '' },
				{ startIndex: 264, type: 'comment.sass' },
				{ startIndex: 313, type: '' },
				{ startIndex: 314, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 315, type: '' },
				{ startIndex: 316, type: 'punctuation.curly.sass' },
				{ startIndex: 317, type: '' },
				{ startIndex: 318, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 324, type: '' },
				{ startIndex: 325, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 330, type: 'punctuation.sass' },
				{ startIndex: 331, type: '' },
				{ startIndex: 332, type: 'punctuation.curly.sass' }
			]}],

			// Variable declarations and references
			[{
			line: '$width: 5em;\n$width: "Second width?" !default;\n#main {\n  $localvar: 6em;\n  width: $width;\n\n  $font-size: 12px;\n  $line-height: 30px;\n  font: #{$font-size}/#{$line-height};\n}\n$name: foo;\n$attr: border;\np.#{$name} {\n  #{$attr}-color: blue;\n}',
			tokens: [
				{ startIndex: 0, type: 'variable.decl.sass' },
				{ startIndex: 7, type: '' },
				{ startIndex: 8, type: 'constant.numeric.sass' },
				{ startIndex: 11, type: 'punctuation.sass' },
				{ startIndex: 12, type: '' },
				{ startIndex: 13, type: 'variable.decl.sass' },
				{ startIndex: 20, type: '' },
				{ startIndex: 21, type: 'string.punctuation.sass' },
				{ startIndex: 22, type: 'string.sass' },
				{ startIndex: 35, type: 'string.punctuation.sass' },
				{ startIndex: 36, type: '' },
				{ startIndex: 37, type: 'literal.sass' },
				{ startIndex: 45, type: 'punctuation.sass' },
				{ startIndex: 46, type: '' },
				{ startIndex: 47, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 52, type: '' },
				{ startIndex: 53, type: 'punctuation.curly.sass' },
				{ startIndex: 54, type: '' },
				{ startIndex: 57, type: 'variable.decl.sass' },
				{ startIndex: 67, type: '' },
				{ startIndex: 68, type: 'constant.numeric.sass' },
				{ startIndex: 71, type: 'punctuation.sass' },
				{ startIndex: 72, type: '' },
				{ startIndex: 75, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 81, type: '' },
				{ startIndex: 82, type: 'variable.ref.sass' },
				{ startIndex: 88, type: 'punctuation.sass' },
				{ startIndex: 89, type: '' },
				{ startIndex: 93, type: 'variable.decl.sass' },
				{ startIndex: 104, type: '' },
				{ startIndex: 105, type: 'constant.numeric.sass' },
				{ startIndex: 109, type: 'punctuation.sass' },
				{ startIndex: 110, type: '' },
				{ startIndex: 113, type: 'variable.decl.sass' },
				{ startIndex: 126, type: '' },
				{ startIndex: 127, type: 'constant.numeric.sass' },
				{ startIndex: 131, type: 'punctuation.sass' },
				{ startIndex: 132, type: '' },
				{ startIndex: 135, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 140, type: '' },
				{ startIndex: 141, type: 'support.function.interpolation.sass' },
				{ startIndex: 143, type: 'variable.ref.sass' },
				{ startIndex: 153, type: 'support.function.interpolation.sass' },
				{ startIndex: 154, type: 'keyword.operator.sass' },
				{ startIndex: 155, type: 'support.function.interpolation.sass' },
				{ startIndex: 157, type: 'variable.ref.sass' },
				{ startIndex: 169, type: 'support.function.interpolation.sass' },
				{ startIndex: 170, type: 'punctuation.sass' },
				{ startIndex: 171, type: '' },
				{ startIndex: 172, type: 'punctuation.curly.sass' },
				{ startIndex: 173, type: '' },
				{ startIndex: 174, type: 'variable.decl.sass' },
				{ startIndex: 180, type: '' },
				{ startIndex: 181, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 184, type: 'punctuation.sass' },
				{ startIndex: 185, type: '' },
				{ startIndex: 186, type: 'variable.decl.sass' },
				{ startIndex: 192, type: '' },
				{ startIndex: 193, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 199, type: 'punctuation.sass' },
				{ startIndex: 200, type: '' },
				{ startIndex: 201, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 203, type: 'support.function.interpolation.sass' },
				{ startIndex: 205, type: 'variable.ref.sass' },
				{ startIndex: 210, type: 'support.function.interpolation.sass' },
				{ startIndex: 211, type: '' },
				{ startIndex: 212, type: 'punctuation.curly.sass' },
				{ startIndex: 213, type: '' },
				{ startIndex: 216, type: 'support.function.interpolation.sass' },
				{ startIndex: 218, type: 'variable.ref.sass' },
				{ startIndex: 223, type: 'support.function.interpolation.sass' },
				{ startIndex: 224, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 231, type: '' },
				{ startIndex: 232, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 236, type: 'punctuation.sass' },
				{ startIndex: 237, type: '' },
				{ startIndex: 238, type: 'punctuation.curly.sass' }
			]}],

			// Variable declaration with whitespaces
			[{
			line: '// Set the color of your columns\n$grid-background-column-color     : rgba(100, 100, 225, 0.25)   !default;',
			tokens: [
				{ startIndex: 0, type: 'comment.sass' },
				{ startIndex: 32, type: '' },
				{ startIndex: 33, type: 'variable.decl.sass' },
				{ startIndex: 68, type: '' },
				{ startIndex: 69, type: 'support.function.name.sass' },
				{ startIndex: 74, type: 'constant.numeric.sass' },
				{ startIndex: 77, type: 'punctuation.sass' },
				{ startIndex: 78, type: '' },
				{ startIndex: 79, type: 'constant.numeric.sass' },
				{ startIndex: 82, type: 'punctuation.sass' },
				{ startIndex: 83, type: '' },
				{ startIndex: 84, type: 'constant.numeric.sass' },
				{ startIndex: 87, type: 'punctuation.sass' },
				{ startIndex: 88, type: '' },
				{ startIndex: 89, type: 'constant.numeric.sass' },
				{ startIndex: 93, type: 'support.function.name.sass' },
				{ startIndex: 94, type: '' },
				{ startIndex: 97, type: 'literal.sass' },
				{ startIndex: 105, type: 'punctuation.sass' }
			]}],

			// Operations
			[{
			line: 'p {\n  width: (1em + 2em) * 3;\n  color: #010203 + #040506;\n  font-family: sans- + "serif";\n  margin: 3px + 4px auto;\n  content: "I ate #{5 + 10} pies!";\n  color: hsl(0, 100%, 50%);\n  color: hsl($hue: 0, $saturation: 100%, $lightness: 50%);\n}',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 1, type: '' },
				{ startIndex: 2, type: 'punctuation.curly.sass' },
				{ startIndex: 3, type: '' },
				{ startIndex: 6, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 12, type: '' },
				{ startIndex: 13, type: 'punctuation.parenthesis.sass' },
				{ startIndex: 14, type: 'constant.numeric.sass' },
				{ startIndex: 17, type: '' },
				{ startIndex: 18, type: 'keyword.operator.sass' },
				{ startIndex: 19, type: '' },
				{ startIndex: 20, type: 'constant.numeric.sass' },
				{ startIndex: 23, type: 'punctuation.parenthesis.sass' },
				{ startIndex: 24, type: '' },
				{ startIndex: 25, type: 'keyword.operator.sass' },
				{ startIndex: 26, type: '' },
				{ startIndex: 27, type: 'constant.numeric.sass' },
				{ startIndex: 28, type: 'punctuation.sass' },
				{ startIndex: 29, type: '' },
				{ startIndex: 32, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 38, type: '' },
				{ startIndex: 39, type: 'constant.rgb-value.sass' },
				{ startIndex: 46, type: '' },
				{ startIndex: 47, type: 'keyword.operator.sass' },
				{ startIndex: 48, type: '' },
				{ startIndex: 49, type: 'constant.rgb-value.sass' },
				{ startIndex: 56, type: 'punctuation.sass' },
				{ startIndex: 57, type: '' },
				{ startIndex: 60, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 72, type: '' },
				{ startIndex: 73, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 78, type: '' },
				{ startIndex: 79, type: 'keyword.operator.sass' },
				{ startIndex: 80, type: '' },
				{ startIndex: 81, type: 'string.punctuation.sass' },
				{ startIndex: 82, type: 'string.sass' },
				{ startIndex: 87, type: 'string.punctuation.sass' },
				{ startIndex: 88, type: 'punctuation.sass' },
				{ startIndex: 89, type: '' },
				{ startIndex: 92, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 99, type: '' },
				{ startIndex: 100, type: 'constant.numeric.sass' },
				{ startIndex: 103, type: '' },
				{ startIndex: 104, type: 'keyword.operator.sass' },
				{ startIndex: 105, type: '' },
				{ startIndex: 106, type: 'constant.numeric.sass' },
				{ startIndex: 109, type: '' },
				{ startIndex: 110, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 114, type: 'punctuation.sass' },
				{ startIndex: 115, type: '' },
				{ startIndex: 118, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 126, type: '' },
				{ startIndex: 127, type: 'string.punctuation.sass' },
				{ startIndex: 128, type: 'string.sass' },
				{ startIndex: 149, type: 'string.punctuation.sass' },
				{ startIndex: 150, type: 'punctuation.sass' },
				{ startIndex: 151, type: '' },
				{ startIndex: 154, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 160, type: '' },
				{ startIndex: 161, type: 'support.function.name.sass' },
				{ startIndex: 165, type: 'constant.numeric.sass' },
				{ startIndex: 166, type: 'punctuation.sass' },
				{ startIndex: 167, type: '' },
				{ startIndex: 168, type: 'constant.numeric.sass' },
				{ startIndex: 172, type: 'punctuation.sass' },
				{ startIndex: 173, type: '' },
				{ startIndex: 174, type: 'constant.numeric.sass' },
				{ startIndex: 177, type: 'support.function.name.sass' },
				{ startIndex: 178, type: 'punctuation.sass' },
				{ startIndex: 179, type: '' },
				{ startIndex: 182, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 188, type: '' },
				{ startIndex: 189, type: 'support.function.name.sass' },
				{ startIndex: 193, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 198, type: '' },
				{ startIndex: 199, type: 'constant.numeric.sass' },
				{ startIndex: 200, type: 'punctuation.sass' },
				{ startIndex: 201, type: '' },
				{ startIndex: 202, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 214, type: '' },
				{ startIndex: 215, type: 'constant.numeric.sass' },
				{ startIndex: 219, type: 'punctuation.sass' },
				{ startIndex: 220, type: '' },
				{ startIndex: 221, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 232, type: '' },
				{ startIndex: 233, type: 'constant.numeric.sass' },
				{ startIndex: 236, type: 'support.function.name.sass' },
				{ startIndex: 237, type: 'punctuation.sass' },
				{ startIndex: 238, type: '' },
				{ startIndex: 239, type: 'punctuation.curly.sass' }
			]}],

			// Function
			[{
			line: '$grid-width: 40px;\n$gutter-width: 10px;\n@function grid-width($n) {\n  @return $n * $grid-width + ($n - 1) * $gutter-width;\n}\n#sidebar { width: grid-width(5); }',
			tokens: [
				{ startIndex: 0, type: 'variable.decl.sass' },
				{ startIndex: 12, type: '' },
				{ startIndex: 13, type: 'constant.numeric.sass' },
				{ startIndex: 17, type: 'punctuation.sass' },
				{ startIndex: 18, type: '' },
				{ startIndex: 19, type: 'variable.decl.sass' },
				{ startIndex: 33, type: '' },
				{ startIndex: 34, type: 'constant.numeric.sass' },
				{ startIndex: 38, type: 'punctuation.sass' },
				{ startIndex: 39, type: '' },
				{ startIndex: 40, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 49, type: '' },
				{ startIndex: 50, type: 'support.function.name.sass' },
				{ startIndex: 61, type: 'variable.ref.sass' },
				{ startIndex: 63, type: 'support.function.name.sass' },
				{ startIndex: 64, type: '' },
				{ startIndex: 65, type: 'punctuation.curly.sass' },
				{ startIndex: 66, type: '' },
				{ startIndex: 69, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 76, type: '' },
				{ startIndex: 77, type: 'variable.ref.sass' },
				{ startIndex: 79, type: '' },
				{ startIndex: 80, type: 'keyword.operator.sass' },
				{ startIndex: 81, type: '' },
				{ startIndex: 82, type: 'variable.ref.sass' },
				{ startIndex: 93, type: '' },
				{ startIndex: 94, type: 'keyword.operator.sass' },
				{ startIndex: 95, type: '' },
				{ startIndex: 96, type: 'punctuation.parenthesis.sass' },
				{ startIndex: 97, type: 'variable.ref.sass' },
				{ startIndex: 99, type: '' },
				{ startIndex: 100, type: 'keyword.operator.sass' },
				{ startIndex: 101, type: '' },
				{ startIndex: 102, type: 'constant.numeric.sass' },
				{ startIndex: 103, type: 'punctuation.parenthesis.sass' },
				{ startIndex: 104, type: '' },
				{ startIndex: 105, type: 'keyword.operator.sass' },
				{ startIndex: 106, type: '' },
				{ startIndex: 107, type: 'variable.ref.sass' },
				{ startIndex: 120, type: 'punctuation.sass' },
				{ startIndex: 121, type: '' },
				{ startIndex: 122, type: 'punctuation.curly.sass' },
				{ startIndex: 123, type: '' },
				{ startIndex: 124, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 132, type: '' },
				{ startIndex: 133, type: 'punctuation.curly.sass' },
				{ startIndex: 134, type: '' },
				{ startIndex: 135, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 141, type: '' },
				{ startIndex: 142, type: 'support.function.name.sass' },
				{ startIndex: 153, type: 'constant.numeric.sass' },
				{ startIndex: 154, type: 'support.function.name.sass' },
				{ startIndex: 155, type: 'punctuation.sass' },
				{ startIndex: 156, type: '' },
				{ startIndex: 157, type: 'punctuation.curly.sass' }
			]}],

			// Imports
			[{
			line: '@import "foo.scss";\n$family: unquote("Droid+Sans");\n@import "rounded-corners" url("http://fonts.googleapis.com/css?family=#{$family}");\n#main {\n  @import "example";\n}',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 7, type: '' },
				{ startIndex: 8, type: 'string.punctuation.sass' },
				{ startIndex: 9, type: 'string.sass' },
				{ startIndex: 17, type: 'string.punctuation.sass' },
				{ startIndex: 18, type: 'punctuation.sass' },
				{ startIndex: 19, type: '' },
				{ startIndex: 20, type: 'variable.decl.sass' },
				{ startIndex: 28, type: '' },
				{ startIndex: 29, type: 'support.function.name.sass' },
				{ startIndex: 37, type: 'string.punctuation.sass' },
				{ startIndex: 38, type: 'string.sass' },
				{ startIndex: 48, type: 'string.punctuation.sass' },
				{ startIndex: 49, type: 'support.function.name.sass' },
				{ startIndex: 50, type: 'punctuation.sass' },
				{ startIndex: 51, type: '' },
				{ startIndex: 52, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 59, type: '' },
				{ startIndex: 60, type: 'string.punctuation.sass' },
				{ startIndex: 61, type: 'string.sass' },
				{ startIndex: 76, type: 'string.punctuation.sass' },
				{ startIndex: 77, type: '' },
				{ startIndex: 78, type: 'support.function.name.sass' },
				{ startIndex: 82, type: 'string.punctuation.sass' },
				{ startIndex: 83, type: 'string.sass' },
				{ startIndex: 132, type: 'string.punctuation.sass' },
				{ startIndex: 133, type: 'support.function.name.sass' },
				{ startIndex: 134, type: 'punctuation.sass' },
				{ startIndex: 135, type: '' },
				{ startIndex: 136, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 141, type: '' },
				{ startIndex: 142, type: 'punctuation.curly.sass' },
				{ startIndex: 143, type: '' },
				{ startIndex: 146, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 153, type: '' },
				{ startIndex: 154, type: 'string.punctuation.sass' },
				{ startIndex: 155, type: 'string.sass' },
				{ startIndex: 162, type: 'string.punctuation.sass' },
				{ startIndex: 163, type: 'punctuation.sass' },
				{ startIndex: 164, type: '' },
				{ startIndex: 165, type: 'punctuation.curly.sass' }
			]}],

			// Media
			[{
			line: '.sidebar {\n  width: 300px;\n  @media screen and (orientation: landscape) {\n    width: 500px;\n  }\n}',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 8, type: '' },
				{ startIndex: 9, type: 'punctuation.curly.sass' },
				{ startIndex: 10, type: '' },
				{ startIndex: 13, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 19, type: '' },
				{ startIndex: 20, type: 'constant.numeric.sass' },
				{ startIndex: 25, type: 'punctuation.sass' },
				{ startIndex: 26, type: '' },
				{ startIndex: 29, type: 'keyword.flow.control.at-rule.sass' },
				{ startIndex: 35, type: '' },
				{ startIndex: 36, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 42, type: '' },
				{ startIndex: 43, type: 'keyword.operator.sass' },
				{ startIndex: 46, type: '' },
				{ startIndex: 47, type: 'punctuation.parenthesis.sass' },
				{ startIndex: 48, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 59, type: '' },
				{ startIndex: 61, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 70, type: 'punctuation.parenthesis.sass' },
				{ startIndex: 71, type: '' },
				{ startIndex: 72, type: 'punctuation.curly.sass' },
				{ startIndex: 73, type: '' },
				{ startIndex: 78, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 84, type: '' },
				{ startIndex: 85, type: 'constant.numeric.sass' },
				{ startIndex: 90, type: 'punctuation.sass' },
				{ startIndex: 91, type: '' },
				{ startIndex: 94, type: 'punctuation.curly.sass' },
				{ startIndex: 95, type: '' },
				{ startIndex: 96, type: 'punctuation.curly.sass' }
			]}],

			// Extend
			[{
			line: '.error {\n  border: 1px #f00;\n  background-color: #fdd;\n}\n.seriousError {\n  @extend .error;\n  border-width: 3px;\n}\n#context a%extreme {\n  color: blue;\n  font-weight: bold;\n  font-size: 2em;\n}\n.notice {\n  @extend %extreme !optional;\n}',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 6, type: '' },
				{ startIndex: 7, type: 'punctuation.curly.sass' },
				{ startIndex: 8, type: '' },
				{ startIndex: 11, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 18, type: '' },
				{ startIndex: 19, type: 'constant.numeric.sass' },
				{ startIndex: 22, type: '' },
				{ startIndex: 23, type: 'constant.rgb-value.sass' },
				{ startIndex: 27, type: 'punctuation.sass' },
				{ startIndex: 28, type: '' },
				{ startIndex: 31, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 48, type: '' },
				{ startIndex: 49, type: 'constant.rgb-value.sass' },
				{ startIndex: 53, type: 'punctuation.sass' },
				{ startIndex: 54, type: '' },
				{ startIndex: 55, type: 'punctuation.curly.sass' },
				{ startIndex: 56, type: '' },
				{ startIndex: 57, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 70, type: '' },
				{ startIndex: 71, type: 'punctuation.curly.sass' },
				{ startIndex: 72, type: '' },
				{ startIndex: 75, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 82, type: '' },
				{ startIndex: 83, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 89, type: 'punctuation.sass' },
				{ startIndex: 90, type: '' },
				{ startIndex: 93, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 106, type: '' },
				{ startIndex: 107, type: 'constant.numeric.sass' },
				{ startIndex: 110, type: 'punctuation.sass' },
				{ startIndex: 111, type: '' },
				{ startIndex: 112, type: 'punctuation.curly.sass' },
				{ startIndex: 113, type: '' },
				{ startIndex: 114, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 122, type: '' },
				{ startIndex: 123, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 132, type: '' },
				{ startIndex: 133, type: 'punctuation.curly.sass' },
				{ startIndex: 134, type: '' },
				{ startIndex: 137, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 143, type: '' },
				{ startIndex: 144, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 148, type: 'punctuation.sass' },
				{ startIndex: 149, type: '' },
				{ startIndex: 152, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 164, type: '' },
				{ startIndex: 165, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 169, type: 'punctuation.sass' },
				{ startIndex: 170, type: '' },
				{ startIndex: 173, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 183, type: '' },
				{ startIndex: 184, type: 'constant.numeric.sass' },
				{ startIndex: 187, type: 'punctuation.sass' },
				{ startIndex: 188, type: '' },
				{ startIndex: 189, type: 'punctuation.curly.sass' },
				{ startIndex: 190, type: '' },
				{ startIndex: 191, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 198, type: '' },
				{ startIndex: 199, type: 'punctuation.curly.sass' },
				{ startIndex: 200, type: '' },
				{ startIndex: 203, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 210, type: '' },
				{ startIndex: 211, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 219, type: '' },
				{ startIndex: 220, type: 'literal.sass' },
				{ startIndex: 229, type: 'punctuation.sass' },
				{ startIndex: 230, type: '' },
				{ startIndex: 231, type: 'punctuation.curly.sass' }
			]}],

			// @debug and @warn
			[{
			line: '@debug 10em + 12em;\n@mixin adjust-location($x, $y) {\n  @if unitless($x) {\n    @warn "Assuming #{$x} to be in pixels";\n    $x: 1px * $x;\n  }\n  @if unitless($y) {\n    @warn "Assuming #{$y} to be in pixels";\n    $y: 1px * $y;\n  }\n  position: relative; left: $x; top: $y;\n}',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 6, type: '' },
				{ startIndex: 7, type: 'constant.numeric.sass' },
				{ startIndex: 11, type: '' },
				{ startIndex: 12, type: 'keyword.operator.sass' },
				{ startIndex: 13, type: '' },
				{ startIndex: 14, type: 'constant.numeric.sass' },
				{ startIndex: 18, type: 'punctuation.sass' },
				{ startIndex: 19, type: '' },
				{ startIndex: 20, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 26, type: '' },
				{ startIndex: 27, type: 'support.function.name.sass' },
				{ startIndex: 43, type: 'variable.ref.sass' },
				{ startIndex: 45, type: 'punctuation.sass' },
				{ startIndex: 46, type: '' },
				{ startIndex: 47, type: 'variable.ref.sass' },
				{ startIndex: 49, type: 'support.function.name.sass' },
				{ startIndex: 50, type: '' },
				{ startIndex: 51, type: 'punctuation.curly.sass' },
				{ startIndex: 52, type: '' },
				{ startIndex: 55, type: 'keyword.flow.control.at-rule.sass' },
				{ startIndex: 58, type: '' },
				{ startIndex: 59, type: 'support.function.name.sass' },
				{ startIndex: 68, type: 'variable.ref.sass' },
				{ startIndex: 70, type: 'support.function.name.sass' },
				{ startIndex: 71, type: '' },
				{ startIndex: 72, type: 'punctuation.curly.sass' },
				{ startIndex: 73, type: '' },
				{ startIndex: 78, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 83, type: '' },
				{ startIndex: 84, type: 'string.punctuation.sass' },
				{ startIndex: 85, type: 'string.sass' },
				{ startIndex: 115, type: 'string.punctuation.sass' },
				{ startIndex: 116, type: 'punctuation.sass' },
				{ startIndex: 117, type: '' },
				{ startIndex: 122, type: 'variable.decl.sass' },
				{ startIndex: 125, type: '' },
				{ startIndex: 126, type: 'constant.numeric.sass' },
				{ startIndex: 129, type: '' },
				{ startIndex: 130, type: 'keyword.operator.sass' },
				{ startIndex: 131, type: '' },
				{ startIndex: 132, type: 'variable.ref.sass' },
				{ startIndex: 134, type: 'punctuation.sass' },
				{ startIndex: 135, type: '' },
				{ startIndex: 138, type: 'punctuation.curly.sass' },
				{ startIndex: 139, type: '' },
				{ startIndex: 142, type: 'keyword.flow.control.at-rule.sass' },
				{ startIndex: 145, type: '' },
				{ startIndex: 146, type: 'support.function.name.sass' },
				{ startIndex: 155, type: 'variable.ref.sass' },
				{ startIndex: 157, type: 'support.function.name.sass' },
				{ startIndex: 158, type: '' },
				{ startIndex: 159, type: 'punctuation.curly.sass' },
				{ startIndex: 160, type: '' },
				{ startIndex: 165, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 170, type: '' },
				{ startIndex: 171, type: 'string.punctuation.sass' },
				{ startIndex: 172, type: 'string.sass' },
				{ startIndex: 202, type: 'string.punctuation.sass' },
				{ startIndex: 203, type: 'punctuation.sass' },
				{ startIndex: 204, type: '' },
				{ startIndex: 209, type: 'variable.decl.sass' },
				{ startIndex: 212, type: '' },
				{ startIndex: 213, type: 'constant.numeric.sass' },
				{ startIndex: 216, type: '' },
				{ startIndex: 217, type: 'keyword.operator.sass' },
				{ startIndex: 218, type: '' },
				{ startIndex: 219, type: 'variable.ref.sass' },
				{ startIndex: 221, type: 'punctuation.sass' },
				{ startIndex: 222, type: '' },
				{ startIndex: 225, type: 'punctuation.curly.sass' },
				{ startIndex: 226, type: '' },
				{ startIndex: 229, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 238, type: '' },
				{ startIndex: 239, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 247, type: 'punctuation.sass' },
				{ startIndex: 248, type: '' },
				{ startIndex: 249, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 254, type: '' },
				{ startIndex: 255, type: 'variable.ref.sass' },
				{ startIndex: 257, type: 'punctuation.sass' },
				{ startIndex: 258, type: '' },
				{ startIndex: 259, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 263, type: '' },
				{ startIndex: 264, type: 'variable.ref.sass' },
				{ startIndex: 266, type: 'punctuation.sass' },
				{ startIndex: 267, type: '' },
				{ startIndex: 268, type: 'punctuation.curly.sass' }
			]}],

			// if statement
			[{
			line: 'p {\n  @if 1 + 1 == 2 { border: 1px solid;  }\n  @if 5 < 3      { border: 2px dotted; }\n  @if null       { border: 3px double; }\n}',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 1, type: '' },
				{ startIndex: 2, type: 'punctuation.curly.sass' },
				{ startIndex: 3, type: '' },
				{ startIndex: 6, type: 'keyword.flow.control.at-rule.sass' },
				{ startIndex: 9, type: '' },
				{ startIndex: 10, type: 'constant.numeric.sass' },
				{ startIndex: 11, type: '' },
				{ startIndex: 12, type: 'keyword.operator.sass' },
				{ startIndex: 13, type: '' },
				{ startIndex: 14, type: 'constant.numeric.sass' },
				{ startIndex: 15, type: '' },
				{ startIndex: 16, type: 'keyword.operator.sass' },
				{ startIndex: 18, type: '' },
				{ startIndex: 19, type: 'constant.numeric.sass' },
				{ startIndex: 20, type: '' },
				{ startIndex: 21, type: 'punctuation.curly.sass' },
				{ startIndex: 22, type: '' },
				{ startIndex: 23, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 30, type: '' },
				{ startIndex: 31, type: 'constant.numeric.sass' },
				{ startIndex: 34, type: '' },
				{ startIndex: 35, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 40, type: 'punctuation.sass' },
				{ startIndex: 41, type: '' },
				{ startIndex: 43, type: 'punctuation.curly.sass' },
				{ startIndex: 44, type: '' },
				{ startIndex: 47, type: 'keyword.flow.control.at-rule.sass' },
				{ startIndex: 50, type: '' },
				{ startIndex: 51, type: 'constant.numeric.sass' },
				{ startIndex: 52, type: '' },
				{ startIndex: 53, type: 'keyword.operator.sass' },
				{ startIndex: 54, type: '' },
				{ startIndex: 55, type: 'constant.numeric.sass' },
				{ startIndex: 56, type: '' },
				{ startIndex: 62, type: 'punctuation.curly.sass' },
				{ startIndex: 63, type: '' },
				{ startIndex: 64, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 71, type: '' },
				{ startIndex: 72, type: 'constant.numeric.sass' },
				{ startIndex: 75, type: '' },
				{ startIndex: 76, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 82, type: 'punctuation.sass' },
				{ startIndex: 83, type: '' },
				{ startIndex: 84, type: 'punctuation.curly.sass' },
				{ startIndex: 85, type: '' },
				{ startIndex: 88, type: 'keyword.flow.control.at-rule.sass' },
				{ startIndex: 91, type: '' },
				{ startIndex: 92, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 96, type: '' },
				{ startIndex: 103, type: 'punctuation.curly.sass' },
				{ startIndex: 104, type: '' },
				{ startIndex: 105, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 112, type: '' },
				{ startIndex: 113, type: 'constant.numeric.sass' },
				{ startIndex: 116, type: '' },
				{ startIndex: 117, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 123, type: 'punctuation.sass' },
				{ startIndex: 124, type: '' },
				{ startIndex: 125, type: 'punctuation.curly.sass' },
				{ startIndex: 126, type: '' },
				{ startIndex: 127, type: 'punctuation.curly.sass' }
			]}],

			// if-else statement
			[{
			line: '$type: monster;\np {\n  @if $type == ocean {\n    color: blue;\n  } @else if $type == matador {\n    color: red;\n  } @else {\n    color: black;\n  }\n}',
			tokens: [
				{ startIndex: 0, type: 'variable.decl.sass' },
				{ startIndex: 6, type: '' },
				{ startIndex: 7, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 14, type: 'punctuation.sass' },
				{ startIndex: 15, type: '' },
				{ startIndex: 16, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 17, type: '' },
				{ startIndex: 18, type: 'punctuation.curly.sass' },
				{ startIndex: 19, type: '' },
				{ startIndex: 22, type: 'keyword.flow.control.at-rule.sass' },
				{ startIndex: 25, type: '' },
				{ startIndex: 26, type: 'variable.ref.sass' },
				{ startIndex: 31, type: '' },
				{ startIndex: 32, type: 'keyword.operator.sass' },
				{ startIndex: 34, type: '' },
				{ startIndex: 35, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 40, type: '' },
				{ startIndex: 41, type: 'punctuation.curly.sass' },
				{ startIndex: 42, type: '' },
				{ startIndex: 47, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 53, type: '' },
				{ startIndex: 54, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 58, type: 'punctuation.sass' },
				{ startIndex: 59, type: '' },
				{ startIndex: 62, type: 'punctuation.curly.sass' },
				{ startIndex: 63, type: '' },
				{ startIndex: 64, type: 'keyword.flow.control.at-rule.sass' },
				{ startIndex: 69, type: '' },
				{ startIndex: 70, type: 'keyword.flow.control.at-rule.sass' },
				{ startIndex: 72, type: '' },
				{ startIndex: 73, type: 'variable.ref.sass' },
				{ startIndex: 78, type: '' },
				{ startIndex: 79, type: 'keyword.operator.sass' },
				{ startIndex: 81, type: '' },
				{ startIndex: 82, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 89, type: '' },
				{ startIndex: 90, type: 'punctuation.curly.sass' },
				{ startIndex: 91, type: '' },
				{ startIndex: 96, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 102, type: '' },
				{ startIndex: 103, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 106, type: 'punctuation.sass' },
				{ startIndex: 107, type: '' },
				{ startIndex: 110, type: 'punctuation.curly.sass' },
				{ startIndex: 111, type: '' },
				{ startIndex: 112, type: 'keyword.flow.control.at-rule.sass' },
				{ startIndex: 117, type: '' },
				{ startIndex: 118, type: 'punctuation.curly.sass' },
				{ startIndex: 119, type: '' },
				{ startIndex: 124, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 130, type: '' },
				{ startIndex: 131, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 136, type: 'punctuation.sass' },
				{ startIndex: 137, type: '' },
				{ startIndex: 140, type: 'punctuation.curly.sass' },
				{ startIndex: 141, type: '' },
				{ startIndex: 142, type: 'punctuation.curly.sass' }
			]}],

			// for statement
			[{
			line: '@for $i from 1 through 3 {\n  .item-#{$i} { width: 2em * $i; }\n}',
			tokens: [
				{ startIndex: 0, type: 'keyword.flow.control.at-rule.sass' },
				{ startIndex: 4, type: '' },
				{ startIndex: 5, type: 'variable.ref.sass' },
				{ startIndex: 7, type: '' },
				{ startIndex: 8, type: 'keyword.flow.control.at-rule.sass' },
				{ startIndex: 12, type: '' },
				{ startIndex: 13, type: 'constant.numeric.sass' },
				{ startIndex: 14, type: '' },
				{ startIndex: 15, type: 'keyword.flow.control.at-rule.sass' },
				{ startIndex: 22, type: '' },
				{ startIndex: 23, type: 'constant.numeric.sass' },
				{ startIndex: 24, type: '' },
				{ startIndex: 25, type: 'punctuation.curly.sass' },
				{ startIndex: 26, type: '' },
				{ startIndex: 29, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 35, type: 'support.function.interpolation.sass' },
				{ startIndex: 37, type: 'variable.ref.sass' },
				{ startIndex: 39, type: 'support.function.interpolation.sass' },
				{ startIndex: 40, type: '' },
				{ startIndex: 41, type: 'punctuation.curly.sass' },
				{ startIndex: 42, type: '' },
				{ startIndex: 43, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 49, type: '' },
				{ startIndex: 50, type: 'constant.numeric.sass' },
				{ startIndex: 53, type: '' },
				{ startIndex: 54, type: 'keyword.operator.sass' },
				{ startIndex: 55, type: '' },
				{ startIndex: 56, type: 'variable.ref.sass' },
				{ startIndex: 58, type: 'punctuation.sass' },
				{ startIndex: 59, type: '' },
				{ startIndex: 60, type: 'punctuation.curly.sass' },
				{ startIndex: 61, type: '' },
				{ startIndex: 62, type: 'punctuation.curly.sass' }
			]}],

			// each statement
			[{
			line: '@each $animal in puma, sea-slug, egret, salamander {\n  .#{$animal}-icon {\n    background-image: url(\'/images/#{$animal}.png\');\n  }\n}',
			tokens: [
				{ startIndex: 0, type: 'keyword.flow.control.at-rule.sass' },
				{ startIndex: 5, type: '' },
				{ startIndex: 6, type: 'variable.ref.sass' },
				{ startIndex: 13, type: '' },
				{ startIndex: 14, type: 'keyword.flow.control.at-rule.sass' },
				{ startIndex: 16, type: '' },
				{ startIndex: 17, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 21, type: 'keyword.operator.sass' },
				{ startIndex: 22, type: '' },
				{ startIndex: 23, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 31, type: 'keyword.operator.sass' },
				{ startIndex: 32, type: '' },
				{ startIndex: 33, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 38, type: 'keyword.operator.sass' },
				{ startIndex: 39, type: '' },
				{ startIndex: 40, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 50, type: '' },
				{ startIndex: 51, type: 'punctuation.curly.sass' },
				{ startIndex: 52, type: '' },
				{ startIndex: 55, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 56, type: 'support.function.interpolation.sass' },
				{ startIndex: 58, type: 'variable.ref.sass' },
				{ startIndex: 65, type: 'support.function.interpolation.sass' },
				{ startIndex: 66, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 71, type: '' },
				{ startIndex: 72, type: 'punctuation.curly.sass' },
				{ startIndex: 73, type: '' },
				{ startIndex: 78, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 95, type: '' },
				{ startIndex: 96, type: 'support.function.name.sass' },
				{ startIndex: 100, type: 'string.punctuation.sass' },
				{ startIndex: 101, type: 'string.sass' },
				{ startIndex: 123, type: 'string.punctuation.sass' },
				{ startIndex: 124, type: 'support.function.name.sass' },
				{ startIndex: 125, type: 'punctuation.sass' },
				{ startIndex: 126, type: '' },
				{ startIndex: 129, type: 'punctuation.curly.sass' },
				{ startIndex: 130, type: '' },
				{ startIndex: 131, type: 'punctuation.curly.sass' }
			]}],

			// while statement
			[{
			line: '$i: 6;\n@while $i > 0 {\n  .item-#{$i} { width: 2em * $i; }\n  $i: $i - 2;\n}',
			tokens: [
				{ startIndex: 0, type: 'variable.decl.sass' },
				{ startIndex: 3, type: '' },
				{ startIndex: 4, type: 'constant.numeric.sass' },
				{ startIndex: 5, type: 'punctuation.sass' },
				{ startIndex: 6, type: '' },
				{ startIndex: 7, type: 'keyword.flow.control.at-rule.sass' },
				{ startIndex: 13, type: '' },
				{ startIndex: 14, type: 'variable.ref.sass' },
				{ startIndex: 16, type: '' },
				{ startIndex: 17, type: 'keyword.operator.sass' },
				{ startIndex: 18, type: '' },
				{ startIndex: 19, type: 'constant.numeric.sass' },
				{ startIndex: 20, type: '' },
				{ startIndex: 21, type: 'punctuation.curly.sass' },
				{ startIndex: 22, type: '' },
				{ startIndex: 25, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 31, type: 'support.function.interpolation.sass' },
				{ startIndex: 33, type: 'variable.ref.sass' },
				{ startIndex: 35, type: 'support.function.interpolation.sass' },
				{ startIndex: 36, type: '' },
				{ startIndex: 37, type: 'punctuation.curly.sass' },
				{ startIndex: 38, type: '' },
				{ startIndex: 39, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 45, type: '' },
				{ startIndex: 46, type: 'constant.numeric.sass' },
				{ startIndex: 49, type: '' },
				{ startIndex: 50, type: 'keyword.operator.sass' },
				{ startIndex: 51, type: '' },
				{ startIndex: 52, type: 'variable.ref.sass' },
				{ startIndex: 54, type: 'punctuation.sass' },
				{ startIndex: 55, type: '' },
				{ startIndex: 56, type: 'punctuation.curly.sass' },
				{ startIndex: 57, type: '' },
				{ startIndex: 60, type: 'variable.decl.sass' },
				{ startIndex: 63, type: '' },
				{ startIndex: 64, type: 'variable.ref.sass' },
				{ startIndex: 66, type: '' },
				{ startIndex: 67, type: 'keyword.operator.sass' },
				{ startIndex: 68, type: '' },
				{ startIndex: 69, type: 'constant.numeric.sass' },
				{ startIndex: 70, type: 'punctuation.sass' },
				{ startIndex: 71, type: '' },
				{ startIndex: 72, type: 'punctuation.curly.sass' }
			]}],

			// Function with control statements nested
			[{
			line: '@function foo($total, $a) {\n  @for $i from 0 to $total {\n    @if (unit($a) == "%") and ($i == ($total - 1)) {\n      $z: 100%;\n      @return \'1\';\n    }\n  }\n  @return $grid;\n}',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 9, type: '' },
				{ startIndex: 10, type: 'support.function.name.sass' },
				{ startIndex: 14, type: 'variable.ref.sass' },
				{ startIndex: 20, type: 'punctuation.sass' },
				{ startIndex: 21, type: '' },
				{ startIndex: 22, type: 'variable.ref.sass' },
				{ startIndex: 24, type: 'support.function.name.sass' },
				{ startIndex: 25, type: '' },
				{ startIndex: 26, type: 'punctuation.curly.sass' },
				{ startIndex: 27, type: '' },
				{ startIndex: 30, type: 'keyword.flow.control.at-rule.sass' },
				{ startIndex: 34, type: '' },
				{ startIndex: 35, type: 'variable.ref.sass' },
				{ startIndex: 37, type: '' },
				{ startIndex: 38, type: 'keyword.flow.control.at-rule.sass' },
				{ startIndex: 42, type: '' },
				{ startIndex: 43, type: 'constant.numeric.sass' },
				{ startIndex: 44, type: '' },
				{ startIndex: 45, type: 'keyword.flow.control.at-rule.sass' },
				{ startIndex: 47, type: '' },
				{ startIndex: 48, type: 'variable.ref.sass' },
				{ startIndex: 54, type: '' },
				{ startIndex: 55, type: 'punctuation.curly.sass' },
				{ startIndex: 56, type: '' },
				{ startIndex: 61, type: 'keyword.flow.control.at-rule.sass' },
				{ startIndex: 64, type: '' },
				{ startIndex: 65, type: 'punctuation.parenthesis.sass' },
				{ startIndex: 66, type: 'support.function.name.sass' },
				{ startIndex: 71, type: 'variable.ref.sass' },
				{ startIndex: 73, type: 'support.function.name.sass' },
				{ startIndex: 74, type: '' },
				{ startIndex: 75, type: 'keyword.operator.sass' },
				{ startIndex: 77, type: '' },
				{ startIndex: 78, type: 'string.punctuation.sass' },
				{ startIndex: 79, type: 'string.sass' },
				{ startIndex: 80, type: 'string.punctuation.sass' },
				{ startIndex: 81, type: 'punctuation.parenthesis.sass' },
				{ startIndex: 82, type: '' },
				{ startIndex: 83, type: 'keyword.operator.sass' },
				{ startIndex: 86, type: '' },
				{ startIndex: 87, type: 'punctuation.parenthesis.sass' },
				{ startIndex: 88, type: 'variable.ref.sass' },
				{ startIndex: 90, type: '' },
				{ startIndex: 91, type: 'keyword.operator.sass' },
				{ startIndex: 93, type: '' },
				{ startIndex: 94, type: 'punctuation.parenthesis.sass' },
				{ startIndex: 95, type: 'variable.ref.sass' },
				{ startIndex: 101, type: '' },
				{ startIndex: 102, type: 'keyword.operator.sass' },
				{ startIndex: 103, type: '' },
				{ startIndex: 104, type: 'constant.numeric.sass' },
				{ startIndex: 105, type: 'punctuation.parenthesis.sass' },
				{ startIndex: 107, type: '' },
				{ startIndex: 108, type: 'punctuation.curly.sass' },
				{ startIndex: 109, type: '' },
				{ startIndex: 116, type: 'variable.decl.sass' },
				{ startIndex: 119, type: '' },
				{ startIndex: 120, type: 'constant.numeric.sass' },
				{ startIndex: 124, type: 'punctuation.sass' },
				{ startIndex: 125, type: '' },
				{ startIndex: 132, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 139, type: '' },
				{ startIndex: 140, type: 'string.punctuation.sass' },
				{ startIndex: 141, type: 'string.sass' },
				{ startIndex: 142, type: 'string.punctuation.sass' },
				{ startIndex: 143, type: 'punctuation.sass' },
				{ startIndex: 144, type: '' },
				{ startIndex: 149, type: 'punctuation.curly.sass' },
				{ startIndex: 150, type: '' },
				{ startIndex: 153, type: 'punctuation.curly.sass' },
				{ startIndex: 154, type: '' },
				{ startIndex: 157, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 164, type: '' },
				{ startIndex: 165, type: 'variable.ref.sass' },
				{ startIndex: 170, type: 'punctuation.sass' },
				{ startIndex: 171, type: '' },
				{ startIndex: 172, type: 'punctuation.curly.sass' }
			]}],

			// @mixin simple
			[{
			line: '@mixin large-text {\n  font: {\n    family: Arial;\n    size: 20px;\n    weight: bold;\n  }\n  color: #ff0000;\n}\n.page-title {\n  @include large-text;\n  padding: 4px;\n}',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 6, type: '' },
				{ startIndex: 7, type: 'support.function.name.sass' },
				{ startIndex: 17, type: '' },
				{ startIndex: 18, type: 'punctuation.curly.sass' },
				{ startIndex: 19, type: '' },
				{ startIndex: 22, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 27, type: '' },
				{ startIndex: 28, type: 'punctuation.curly.sass' },
				{ startIndex: 29, type: '' },
				{ startIndex: 34, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 41, type: '' },
				{ startIndex: 42, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 47, type: 'punctuation.sass' },
				{ startIndex: 48, type: '' },
				{ startIndex: 53, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 58, type: '' },
				{ startIndex: 59, type: 'constant.numeric.sass' },
				{ startIndex: 63, type: 'punctuation.sass' },
				{ startIndex: 64, type: '' },
				{ startIndex: 69, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 76, type: '' },
				{ startIndex: 77, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 81, type: 'punctuation.sass' },
				{ startIndex: 82, type: '' },
				{ startIndex: 85, type: 'punctuation.curly.sass' },
				{ startIndex: 86, type: '' },
				{ startIndex: 89, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 95, type: '' },
				{ startIndex: 96, type: 'constant.rgb-value.sass' },
				{ startIndex: 103, type: 'punctuation.sass' },
				{ startIndex: 104, type: '' },
				{ startIndex: 105, type: 'punctuation.curly.sass' },
				{ startIndex: 106, type: '' },
				{ startIndex: 107, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 118, type: '' },
				{ startIndex: 119, type: 'punctuation.curly.sass' },
				{ startIndex: 120, type: '' },
				{ startIndex: 123, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 131, type: '' },
				{ startIndex: 132, type: 'support.function.name.sass' },
				{ startIndex: 142, type: 'punctuation.sass' },
				{ startIndex: 143, type: '' },
				{ startIndex: 146, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 154, type: '' },
				{ startIndex: 155, type: 'constant.numeric.sass' },
				{ startIndex: 158, type: 'punctuation.sass' },
				{ startIndex: 159, type: '' },
				{ startIndex: 160, type: 'punctuation.curly.sass' }
			]}],

			// @mixin with parameters
			[{
			line: '@mixin sexy-border($color, $width: 1in) {\n  border: {\n    color: $color;\n    width: $width;\n    style: dashed;\n  }\n}\np { @include sexy-border(blue); }',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 6, type: '' },
				{ startIndex: 7, type: 'support.function.name.sass' },
				{ startIndex: 19, type: 'variable.ref.sass' },
				{ startIndex: 25, type: 'punctuation.sass' },
				{ startIndex: 26, type: '' },
				{ startIndex: 27, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 34, type: '' },
				{ startIndex: 35, type: 'constant.numeric.sass' },
				{ startIndex: 38, type: 'support.function.name.sass' },
				{ startIndex: 39, type: '' },
				{ startIndex: 40, type: 'punctuation.curly.sass' },
				{ startIndex: 41, type: '' },
				{ startIndex: 44, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 51, type: '' },
				{ startIndex: 52, type: 'punctuation.curly.sass' },
				{ startIndex: 53, type: '' },
				{ startIndex: 58, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 64, type: '' },
				{ startIndex: 65, type: 'variable.ref.sass' },
				{ startIndex: 71, type: 'punctuation.sass' },
				{ startIndex: 72, type: '' },
				{ startIndex: 77, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 83, type: '' },
				{ startIndex: 84, type: 'variable.ref.sass' },
				{ startIndex: 90, type: 'punctuation.sass' },
				{ startIndex: 91, type: '' },
				{ startIndex: 96, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 102, type: '' },
				{ startIndex: 103, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 109, type: 'punctuation.sass' },
				{ startIndex: 110, type: '' },
				{ startIndex: 113, type: 'punctuation.curly.sass' },
				{ startIndex: 114, type: '' },
				{ startIndex: 115, type: 'punctuation.curly.sass' },
				{ startIndex: 116, type: '' },
				{ startIndex: 117, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 118, type: '' },
				{ startIndex: 119, type: 'punctuation.curly.sass' },
				{ startIndex: 120, type: '' },
				{ startIndex: 121, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 129, type: '' },
				{ startIndex: 130, type: 'support.function.name.sass' },
				{ startIndex: 142, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 146, type: 'support.function.name.sass' },
				{ startIndex: 147, type: 'punctuation.sass' },
				{ startIndex: 148, type: '' },
				{ startIndex: 149, type: 'punctuation.curly.sass' }
			]}],

			// @mixin with varargs
			[{
			line: '@mixin box-shadow($shadows...) {\n  -moz-box-shadow: $shadows;\n  -webkit-box-shadow: $shadows;\n  box-shadow: $shadows;\n}\n.shadows {\n  @include box-shadow(0px 4px 5px #666, 2px 6px 10px #999);\n}',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 6, type: '' },
				{ startIndex: 7, type: 'support.function.name.sass' },
				{ startIndex: 18, type: 'variable.ref.sass' },
				{ startIndex: 26, type: 'keyword.operator.sass' },
				{ startIndex: 29, type: 'support.function.name.sass' },
				{ startIndex: 30, type: '' },
				{ startIndex: 31, type: 'punctuation.curly.sass' },
				{ startIndex: 32, type: '' },
				{ startIndex: 35, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 51, type: '' },
				{ startIndex: 52, type: 'variable.ref.sass' },
				{ startIndex: 60, type: 'punctuation.sass' },
				{ startIndex: 61, type: '' },
				{ startIndex: 64, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 83, type: '' },
				{ startIndex: 84, type: 'variable.ref.sass' },
				{ startIndex: 92, type: 'punctuation.sass' },
				{ startIndex: 93, type: '' },
				{ startIndex: 96, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 107, type: '' },
				{ startIndex: 108, type: 'variable.ref.sass' },
				{ startIndex: 116, type: 'punctuation.sass' },
				{ startIndex: 117, type: '' },
				{ startIndex: 118, type: 'punctuation.curly.sass' },
				{ startIndex: 119, type: '' },
				{ startIndex: 120, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 128, type: '' },
				{ startIndex: 129, type: 'punctuation.curly.sass' },
				{ startIndex: 130, type: '' },
				{ startIndex: 133, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 141, type: '' },
				{ startIndex: 142, type: 'support.function.name.sass' },
				{ startIndex: 153, type: 'constant.numeric.sass' },
				{ startIndex: 156, type: '' },
				{ startIndex: 157, type: 'constant.numeric.sass' },
				{ startIndex: 160, type: '' },
				{ startIndex: 161, type: 'constant.numeric.sass' },
				{ startIndex: 164, type: '' },
				{ startIndex: 165, type: 'constant.rgb-value.sass' },
				{ startIndex: 169, type: 'punctuation.sass' },
				{ startIndex: 170, type: '' },
				{ startIndex: 171, type: 'constant.numeric.sass' },
				{ startIndex: 174, type: '' },
				{ startIndex: 175, type: 'constant.numeric.sass' },
				{ startIndex: 178, type: '' },
				{ startIndex: 179, type: 'constant.numeric.sass' },
				{ startIndex: 183, type: '' },
				{ startIndex: 184, type: 'constant.rgb-value.sass' },
				{ startIndex: 188, type: 'support.function.name.sass' },
				{ startIndex: 189, type: 'punctuation.sass' },
				{ startIndex: 190, type: '' },
				{ startIndex: 191, type: 'punctuation.curly.sass' }
			]}],

			// @include with varargs
			[{
			line: '@mixin colors($text, $background, $border) {\n  color: $text;\n  background-color: $background;\n  border-color: $border;\n}\n$values: #ff0000, #00ff00, #0000ff;\n.primary {\n  @include colors($values...);\n}',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 6, type: '' },
				{ startIndex: 7, type: 'support.function.name.sass' },
				{ startIndex: 14, type: 'variable.ref.sass' },
				{ startIndex: 19, type: 'punctuation.sass' },
				{ startIndex: 20, type: '' },
				{ startIndex: 21, type: 'variable.ref.sass' },
				{ startIndex: 32, type: 'punctuation.sass' },
				{ startIndex: 33, type: '' },
				{ startIndex: 34, type: 'variable.ref.sass' },
				{ startIndex: 41, type: 'support.function.name.sass' },
				{ startIndex: 42, type: '' },
				{ startIndex: 43, type: 'punctuation.curly.sass' },
				{ startIndex: 44, type: '' },
				{ startIndex: 47, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 53, type: '' },
				{ startIndex: 54, type: 'variable.ref.sass' },
				{ startIndex: 59, type: 'punctuation.sass' },
				{ startIndex: 60, type: '' },
				{ startIndex: 63, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 80, type: '' },
				{ startIndex: 81, type: 'variable.ref.sass' },
				{ startIndex: 92, type: 'punctuation.sass' },
				{ startIndex: 93, type: '' },
				{ startIndex: 96, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 109, type: '' },
				{ startIndex: 110, type: 'variable.ref.sass' },
				{ startIndex: 117, type: 'punctuation.sass' },
				{ startIndex: 118, type: '' },
				{ startIndex: 119, type: 'punctuation.curly.sass' },
				{ startIndex: 120, type: '' },
				{ startIndex: 121, type: 'variable.decl.sass' },
				{ startIndex: 129, type: '' },
				{ startIndex: 130, type: 'constant.rgb-value.sass' },
				{ startIndex: 137, type: 'keyword.operator.sass' },
				{ startIndex: 138, type: '' },
				{ startIndex: 139, type: 'constant.rgb-value.sass' },
				{ startIndex: 146, type: 'keyword.operator.sass' },
				{ startIndex: 147, type: '' },
				{ startIndex: 148, type: 'constant.rgb-value.sass' },
				{ startIndex: 155, type: 'punctuation.sass' },
				{ startIndex: 156, type: '' },
				{ startIndex: 157, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 165, type: '' },
				{ startIndex: 166, type: 'punctuation.curly.sass' },
				{ startIndex: 167, type: '' },
				{ startIndex: 170, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 178, type: '' },
				{ startIndex: 179, type: 'support.function.name.sass' },
				{ startIndex: 186, type: 'variable.ref.sass' },
				{ startIndex: 193, type: 'keyword.operator.sass' },
				{ startIndex: 196, type: 'support.function.name.sass' },
				{ startIndex: 197, type: 'punctuation.sass' },
				{ startIndex: 198, type: '' },
				{ startIndex: 199, type: 'punctuation.curly.sass' }
			]}],

			// @include with body
			[{
			line: '@mixin apply-to-ie6-only {\n  * html {\n    @content;\n  }\n}\n@include apply-to-ie6-only {\n  #logo {\n    background-image: url(/logo.gif);\n  }\n}',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 6, type: '' },
				{ startIndex: 7, type: 'support.function.name.sass' },
				{ startIndex: 24, type: '' },
				{ startIndex: 25, type: 'punctuation.curly.sass' },
				{ startIndex: 26, type: '' },
				{ startIndex: 29, type: sassTokenTypes.TOKEN_SELECTOR_TAG + '.sass' },
				{ startIndex: 30, type: '' },
				{ startIndex: 31, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 35, type: '' },
				{ startIndex: 36, type: 'punctuation.curly.sass' },
				{ startIndex: 37, type: '' },
				{ startIndex: 42, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 50, type: '' },
				{ startIndex: 54, type: 'punctuation.curly.sass' },
				{ startIndex: 55, type: '' },
				{ startIndex: 56, type: 'punctuation.curly.sass' },
				{ startIndex: 57, type: '' },
				{ startIndex: 58, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 66, type: '' },
				{ startIndex: 67, type: 'support.function.name.sass' },
				{ startIndex: 84, type: '' },
				{ startIndex: 85, type: 'punctuation.curly.sass' },
				{ startIndex: 86, type: '' },
				{ startIndex: 89, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 94, type: '' },
				{ startIndex: 95, type: 'punctuation.curly.sass' },
				{ startIndex: 96, type: '' },
				{ startIndex: 101, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 118, type: '' },
				{ startIndex: 119, type: 'support.function.name.sass' },
				{ startIndex: 123, type: 'string.sass' },
				{ startIndex: 132, type: 'support.function.name.sass' },
				{ startIndex: 133, type: 'punctuation.sass' },
				{ startIndex: 134, type: '' },
				{ startIndex: 137, type: 'punctuation.curly.sass' },
				{ startIndex: 138, type: '' },
				{ startIndex: 139, type: 'punctuation.curly.sass' }
			]}],

			// CSS charset
			[{
			line: '@charset "UTF-8";',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 8, type: '' },
				{ startIndex: 9, type: 'string.punctuation.sass' },
				{ startIndex: 10, type: 'string.sass' },
				{ startIndex: 15, type: 'string.punctuation.sass' },
				{ startIndex: 16, type: 'punctuation.sass' }
			]}],

			// CSS attributes
			[{
			line: '[rel="external"]::after {\n    content: \'s\';\n}',
			tokens: [
				{ startIndex: 0, type: 'punctuation.bracket.sass' },
				{ startIndex: 1, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 4, type: 'keyword.operator.sass' },
				{ startIndex: 5, type: 'string.punctuation.sass' },
				{ startIndex: 6, type: 'string.sass' },
				{ startIndex: 14, type: 'string.punctuation.sass' },
				{ startIndex: 15, type: 'punctuation.bracket.sass' },
				{ startIndex: 16, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 23, type: '' },
				{ startIndex: 24, type: 'punctuation.curly.sass' },
				{ startIndex: 25, type: '' },
				{ startIndex: 30, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 38, type: '' },
				{ startIndex: 39, type: 'string.punctuation.sass' },
				{ startIndex: 40, type: 'string.sass' },
				{ startIndex: 41, type: 'string.punctuation.sass' },
				{ startIndex: 42, type: 'punctuation.sass' },
				{ startIndex: 43, type: '' },
				{ startIndex: 44, type: 'punctuation.curly.sass' }
			]}],

			// CSS @page
			[{
			line: '@page :left {\n  margin-left: 4cm;\n  margin-right: 3cm;\n}',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 5, type: '' },
				{ startIndex: 6, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 11, type: '' },
				{ startIndex: 12, type: 'punctuation.curly.sass' },
				{ startIndex: 13, type: '' },
				{ startIndex: 16, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 28, type: '' },
				{ startIndex: 29, type: 'constant.numeric.sass' },
				{ startIndex: 32, type: 'punctuation.sass' },
				{ startIndex: 33, type: '' },
				{ startIndex: 36, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 49, type: '' },
				{ startIndex: 50, type: 'constant.numeric.sass' },
				{ startIndex: 53, type: 'punctuation.sass' },
				{ startIndex: 54, type: '' },
				{ startIndex: 55, type: 'punctuation.curly.sass' }
			]}],

			// Extend with interpolation variable
			[{
			line: '@mixin error($a: false) {\n  @extend .#{$a};\n  @extend ##{$a};\n}\n#bar {a: 1px;}\n.bar {b: 1px;}\nfoo {\n  @include error(\'bar\');   \n}',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 6, type: '' },
				{ startIndex: 7, type: 'support.function.name.sass' },
				{ startIndex: 13, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 16, type: '' },
				{ startIndex: 17, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 22, type: 'support.function.name.sass' },
				{ startIndex: 23, type: '' },
				{ startIndex: 24, type: 'punctuation.curly.sass' },
				{ startIndex: 25, type: '' },
				{ startIndex: 28, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 35, type: '' },
				{ startIndex: 36, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 37, type: 'support.function.interpolation.sass' },
				{ startIndex: 39, type: 'variable.ref.sass' },
				{ startIndex: 41, type: 'support.function.interpolation.sass' },
				{ startIndex: 42, type: 'punctuation.sass' },
				{ startIndex: 43, type: '' },
				{ startIndex: 46, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 53, type: '' },
				{ startIndex: 54, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 55, type: 'support.function.interpolation.sass' },
				{ startIndex: 57, type: 'variable.ref.sass' },
				{ startIndex: 59, type: 'support.function.interpolation.sass' },
				{ startIndex: 60, type: 'punctuation.sass' },
				{ startIndex: 61, type: '' },
				{ startIndex: 62, type: 'punctuation.curly.sass' },
				{ startIndex: 63, type: '' },
				{ startIndex: 64, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 68, type: '' },
				{ startIndex: 69, type: 'punctuation.curly.sass' },
				{ startIndex: 70, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 72, type: '' },
				{ startIndex: 73, type: 'constant.numeric.sass' },
				{ startIndex: 76, type: 'punctuation.sass' },
				{ startIndex: 77, type: 'punctuation.curly.sass' },
				{ startIndex: 78, type: '' },
				{ startIndex: 79, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 83, type: '' },
				{ startIndex: 84, type: 'punctuation.curly.sass' },
				{ startIndex: 85, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 87, type: '' },
				{ startIndex: 88, type: 'constant.numeric.sass' },
				{ startIndex: 91, type: 'punctuation.sass' },
				{ startIndex: 92, type: 'punctuation.curly.sass' },
				{ startIndex: 93, type: '' },
				{ startIndex: 94, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 97, type: '' },
				{ startIndex: 98, type: 'punctuation.curly.sass' },
				{ startIndex: 99, type: '' },
				{ startIndex: 102, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 110, type: '' },
				{ startIndex: 111, type: 'support.function.name.sass' },
				{ startIndex: 117, type: 'string.punctuation.sass' },
				{ startIndex: 118, type: 'string.sass' },
				{ startIndex: 121, type: 'string.punctuation.sass' },
				{ startIndex: 122, type: 'support.function.name.sass' },
				{ startIndex: 123, type: 'punctuation.sass' },
				{ startIndex: 124, type: '' },
				{ startIndex: 128, type: 'punctuation.curly.sass' }
			]}],

			// @font-face
			[{
			line: '@font-face { font-family: Delicious; src: url(\'Delicious-Roman.otf\'); } ',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 10, type: '' },
				{ startIndex: 11, type: 'punctuation.curly.sass' },
				{ startIndex: 12, type: '' },
				{ startIndex: 13, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 25, type: '' },
				{ startIndex: 26, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 35, type: 'punctuation.sass' },
				{ startIndex: 36, type: '' },
				{ startIndex: 37, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 41, type: '' },
				{ startIndex: 42, type: 'support.function.name.sass' },
				{ startIndex: 46, type: 'string.punctuation.sass' },
				{ startIndex: 47, type: 'string.sass' },
				{ startIndex: 66, type: 'string.punctuation.sass' },
				{ startIndex: 67, type: 'support.function.name.sass' },
				{ startIndex: 68, type: 'punctuation.sass' },
				{ startIndex: 69, type: '' },
				{ startIndex: 70, type: 'punctuation.curly.sass' },
				{ startIndex: 71, type: '' }
			]}],

			// Keyframes
			[{
			line: '@-webkit-keyframes NAME-YOUR-ANIMATION {\n  0%   { opacity: 0; }\n  100% { opacity: 1; }\n}\n@-moz-keyframes NAME-YOUR-ANIMATION {\n  0%   { opacity: 0; }\n  100% { opacity: 1; }\n}\n@-o-keyframes NAME-YOUR-ANIMATION {\n  0%   { opacity: 0; }\n  100% { opacity: 1; }\n}\n@keyframes NAME-YOUR-ANIMATION {\n  0%   { opacity: 0; }\n  100% { opacity: 1; }\n}',
			tokens: [
				{ startIndex: 0, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 18, type: '' },
				{ startIndex: 19, type: 'support.function.name.sass' },
				{ startIndex: 38, type: '' },
				{ startIndex: 39, type: 'punctuation.curly.sass' },
				{ startIndex: 40, type: '' },
				{ startIndex: 43, type: 'constant.numeric.sass' },
				{ startIndex: 45, type: '' },
				{ startIndex: 48, type: 'punctuation.curly.sass' },
				{ startIndex: 49, type: '' },
				{ startIndex: 50, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 58, type: '' },
				{ startIndex: 59, type: 'constant.numeric.sass' },
				{ startIndex: 60, type: 'punctuation.sass' },
				{ startIndex: 61, type: '' },
				{ startIndex: 62, type: 'punctuation.curly.sass' },
				{ startIndex: 63, type: '' },
				{ startIndex: 66, type: 'constant.numeric.sass' },
				{ startIndex: 70, type: '' },
				{ startIndex: 71, type: 'punctuation.curly.sass' },
				{ startIndex: 72, type: '' },
				{ startIndex: 73, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 81, type: '' },
				{ startIndex: 82, type: 'constant.numeric.sass' },
				{ startIndex: 83, type: 'punctuation.sass' },
				{ startIndex: 84, type: '' },
				{ startIndex: 85, type: 'punctuation.curly.sass' },
				{ startIndex: 86, type: '' },
				{ startIndex: 87, type: 'punctuation.curly.sass' },
				{ startIndex: 88, type: '' },
				{ startIndex: 89, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 104, type: '' },
				{ startIndex: 105, type: 'support.function.name.sass' },
				{ startIndex: 124, type: '' },
				{ startIndex: 125, type: 'punctuation.curly.sass' },
				{ startIndex: 126, type: '' },
				{ startIndex: 129, type: 'constant.numeric.sass' },
				{ startIndex: 131, type: '' },
				{ startIndex: 134, type: 'punctuation.curly.sass' },
				{ startIndex: 135, type: '' },
				{ startIndex: 136, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 144, type: '' },
				{ startIndex: 145, type: 'constant.numeric.sass' },
				{ startIndex: 146, type: 'punctuation.sass' },
				{ startIndex: 147, type: '' },
				{ startIndex: 148, type: 'punctuation.curly.sass' },
				{ startIndex: 149, type: '' },
				{ startIndex: 152, type: 'constant.numeric.sass' },
				{ startIndex: 156, type: '' },
				{ startIndex: 157, type: 'punctuation.curly.sass' },
				{ startIndex: 158, type: '' },
				{ startIndex: 159, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 167, type: '' },
				{ startIndex: 168, type: 'constant.numeric.sass' },
				{ startIndex: 169, type: 'punctuation.sass' },
				{ startIndex: 170, type: '' },
				{ startIndex: 171, type: 'punctuation.curly.sass' },
				{ startIndex: 172, type: '' },
				{ startIndex: 173, type: 'punctuation.curly.sass' },
				{ startIndex: 174, type: '' },
				{ startIndex: 175, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 188, type: '' },
				{ startIndex: 189, type: 'support.function.name.sass' },
				{ startIndex: 208, type: '' },
				{ startIndex: 209, type: 'punctuation.curly.sass' },
				{ startIndex: 210, type: '' },
				{ startIndex: 213, type: 'constant.numeric.sass' },
				{ startIndex: 215, type: '' },
				{ startIndex: 218, type: 'punctuation.curly.sass' },
				{ startIndex: 219, type: '' },
				{ startIndex: 220, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 228, type: '' },
				{ startIndex: 229, type: 'constant.numeric.sass' },
				{ startIndex: 230, type: 'punctuation.sass' },
				{ startIndex: 231, type: '' },
				{ startIndex: 232, type: 'punctuation.curly.sass' },
				{ startIndex: 233, type: '' },
				{ startIndex: 236, type: 'constant.numeric.sass' },
				{ startIndex: 240, type: '' },
				{ startIndex: 241, type: 'punctuation.curly.sass' },
				{ startIndex: 242, type: '' },
				{ startIndex: 243, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 251, type: '' },
				{ startIndex: 252, type: 'constant.numeric.sass' },
				{ startIndex: 253, type: 'punctuation.sass' },
				{ startIndex: 254, type: '' },
				{ startIndex: 255, type: 'punctuation.curly.sass' },
				{ startIndex: 256, type: '' },
				{ startIndex: 257, type: 'punctuation.curly.sass' },
				{ startIndex: 258, type: '' },
				{ startIndex: 259, type: sassTokenTypes.TOKEN_AT_KEYWORD + '.sass' },
				{ startIndex: 269, type: '' },
				{ startIndex: 270, type: 'support.function.name.sass' },
				{ startIndex: 289, type: '' },
				{ startIndex: 290, type: 'punctuation.curly.sass' },
				{ startIndex: 291, type: '' },
				{ startIndex: 294, type: 'constant.numeric.sass' },
				{ startIndex: 296, type: '' },
				{ startIndex: 299, type: 'punctuation.curly.sass' },
				{ startIndex: 300, type: '' },
				{ startIndex: 301, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 309, type: '' },
				{ startIndex: 310, type: 'constant.numeric.sass' },
				{ startIndex: 311, type: 'punctuation.sass' },
				{ startIndex: 312, type: '' },
				{ startIndex: 313, type: 'punctuation.curly.sass' },
				{ startIndex: 314, type: '' },
				{ startIndex: 317, type: 'constant.numeric.sass' },
				{ startIndex: 321, type: '' },
				{ startIndex: 322, type: 'punctuation.curly.sass' },
				{ startIndex: 323, type: '' },
				{ startIndex: 324, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 332, type: '' },
				{ startIndex: 333, type: 'constant.numeric.sass' },
				{ startIndex: 334, type: 'punctuation.sass' },
				{ startIndex: 335, type: '' },
				{ startIndex: 336, type: 'punctuation.curly.sass' },
				{ startIndex: 337, type: '' },
				{ startIndex: 338, type: 'punctuation.curly.sass' }
			]}],

			// String escaping
			[{
			line: '[data-icon=\'test-1\']:before {\n  content:\'\\\\\';\n}\n/* a comment */\n$var1: \'\\\'\';\n$var2: "\\"";\n/* another comment */',
			tokens: [
				{ startIndex: 0, type: 'punctuation.bracket.sass' },
				{ startIndex: 1, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex: 10, type: 'keyword.operator.sass' },
				{ startIndex: 11, type: 'string.punctuation.sass' },
				{ startIndex: 12, type: 'string.sass' },
				{ startIndex: 18, type: 'string.punctuation.sass' },
				{ startIndex: 19, type: 'punctuation.bracket.sass' },
				{ startIndex: 20, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex: 27, type: '' },
				{ startIndex: 28, type: 'punctuation.curly.sass' },
				{ startIndex: 29, type: '' },
				{ startIndex: 32, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 40, type: 'string.punctuation.sass' },
				{ startIndex: 41, type: 'string.sass' },
				{ startIndex: 43, type: 'string.punctuation.sass' },
				{ startIndex: 44, type: 'punctuation.sass' },
				{ startIndex: 45, type: '' },
				{ startIndex: 46, type: 'punctuation.curly.sass' },
				{ startIndex: 47, type: '' },
				{ startIndex: 48, type: 'comment.sass' },
				{ startIndex: 63, type: '' },
				{ startIndex: 64, type: 'variable.decl.sass' },
				{ startIndex: 70, type: '' },
				{ startIndex: 71, type: 'string.punctuation.sass' },
				{ startIndex: 72, type: 'string.sass' },
				{ startIndex: 74, type: 'string.punctuation.sass' },
				{ startIndex: 75, type: 'punctuation.sass' },
				{ startIndex: 76, type: '' },
				{ startIndex: 77, type: 'variable.decl.sass' },
				{ startIndex: 83, type: '' },
				{ startIndex: 84, type: 'string.punctuation.sass' },
				{ startIndex: 85, type: 'string.sass' },
				{ startIndex: 87, type: 'string.punctuation.sass' },
				{ startIndex: 88, type: 'punctuation.sass' },
				{ startIndex: 89, type: '' },
				{ startIndex: 90, type: 'comment.sass' }
			]}],

			// IE star hacks
			[{
			line: 'body {',
			tokens: null},

			{
			line: '  _content: "";',
			tokens: [
				{ startIndex: 0, type: '' },
				{ startIndex: 2, type: sassTokenTypes.TOKEN_PROPERTY + '.sass' },
				{ startIndex: 11, type: '' },
				{ startIndex: 12, type: 'string.punctuation.sass' },
				{ startIndex: 14, type: 'punctuation.sass' }
			]}]
		]);
	});

	test('identifier escaping', function() {
		modesUtil.assertTokenization(tokenizationSupport, [{
			line: 'input[type= \\"submit\\"',
			tokens: [
				{ startIndex:0, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex:5, type: 'punctuation.bracket.sass'},
				{ startIndex:6, type: sassTokenTypes.TOKEN_VALUE + '.sass' },
				{ startIndex:10, type: 'keyword.operator.sass'},
				{ startIndex:11, type: ''},
				{ startIndex:12, type: sassTokenTypes.TOKEN_VALUE + '.sass'}
			]}
		]);
	});

	test('identifier escaping 2', function() {
		modesUtil.assertTokenization(tokenizationSupport, [{
			line: '.\\34 hello { -moz-foo: --myvar }',
			tokens: [
				{ startIndex:0, type: sassTokenTypes.TOKEN_SELECTOR + '.sass' },
				{ startIndex:10, type: ''},
				{ startIndex:11, type: 'punctuation.curly.sass'},
				{ startIndex:12, type: ''},
				{ startIndex:13, type: sassTokenTypes.TOKEN_PROPERTY + '.sass'},
				{ startIndex:22, type: ''},
				{ startIndex:23, type: sassTokenTypes.TOKEN_VALUE + '.sass'},
				{ startIndex:30, type: ''},
				{ startIndex:31, type: 'punctuation.curly.sass'},
			]}
		]);
	});

	test('onEnter', function() {
		assertOnEnter.indents('', '.myRule {', '');
		assertOnEnter.indents('', 'background: url(', '');
		assertOnEnter.indents('', '.myRule[', '');
		assertOnEnter.indentsOutdents('', '.myRule {', '}');
	});
});
