         ''
       ]
       # Putting a label after each string is enough to test the grammar, but
-      # it is not always valid Csound syntax. In particular, loop_ge, loop_gt,
+      # it’s not always valid Csound syntax. In particular, loop_ge, loop_gt,
       # loop_le, and loop_lt all take four arguments, the last of which is a
       # label.
-      lines = grammar.tokenizeLines keywordsAndOpcodes.join ' aLabel //\n'
+      lines = grammar.tokenizeLines(keywordsAndOpcodes.join ' aLabel //\n')
       for i in [0...lines.length - 1]
         tokens = lines[i]
-        expect(tokens[0]).toEqual value: keywordsAndOpcodes[i], scopes: ['source.csound', 'keyword.control.csound']
-        expect(tokens[1]).toEqual value: ' ', scopes: ['source.csound']
-        expect(tokens[2]).toEqual value: 'aLabel', scopes: ['source.csound', 'entity.name.label.csound']
-        expect(tokens[3]).toEqual value: ' ', scopes: ['source.csound']
-        expect(tokens[4]).toEqual value: '//', scopes: ['source.csound', 'comment.line.csound', 'punctuation.definition.comment.line.csound']
+        expect(tokens[0]).toEqual value: keywordsAndOpcodes[i], scopes: [
+          'source.csound'
+          'keyword.control.csound'
+        ]
+        expect(tokens[1]).toEqual value: ' ', scopes: [
+          'source.csound'
+        ]
+        expect(tokens[2]).toEqual value: 'aLabel', scopes: [
+          'source.csound'
+          'entity.name.label.csound'
+        ]
+        expect(tokens[3]).toEqual value: ' ', scopes: [
+          'source.csound'
+        ]
+        expect(tokens[4]).toEqual value: '//', scopes: [
+          'source.csound'
+          'comment.line.csound'
+          'punctuation.definition.comment.line.csound'
+        ]

        'nchnls_i'
        'sr'
      ]
      lines = grammar.tokenizeLines headerGlobalVariables.join('\n')
      for i in [0...lines.length]
        expect(lines[i][0]).toEqual value: headerGlobalVariables[i], scopes: ['source.csound', 'variable.other.readwrite.global.csound']

    it 'tokenizes quoted strings', ->
      lines = grammar.tokenizeLines '"characters$MACRO."'
      tokens = lines[0]
      expect(tokens[0]).toEqual value: '"', scopes: ['source.csound', 'string.quoted.csound', 'punctuation.definition.string.begin.csound']
      expect(tokens[1]).toEqual value: 'characters', scopes: ['source.csound', 'string.quoted.csound']
      expect(tokens[2]).toEqual value: '$MACRO.', scopes: ['source.csound', 'string.quoted.csound', 'entity.name.function.preprocessor.csound']
      expect(tokens[3]).toEqual value: '"', scopes: ['source.csound', 'string.quoted.csound', 'punctuation.definition.string.end.csound']

    it 'tokenizes escaped characters', ->
      escapedCharacters = [

        '@ \t0'
        '@@ \t0'
      ]
      lines = grammar.tokenizeLines(preprocessorDirectives.join '\n')
      for i in [0...lines.length]
        expect(lines[i][0]).toEqual value: preprocessorDirectives[i], scopes: [
          'source.csound'
          'keyword.preprocessor.csound'
        ]

    it 'tokenizes includes', ->
      lines = grammar.tokenizeLines '#include/**/"file.udo"'
      tokens = lines[0]
      expect(tokens[0]).toEqual value: '#include', scopes: [
        'source.csound'
        'keyword.include.preprocessor.csound'
      ]
      expect(tokens[1]).toEqual value: '/*', scopes: [
        'source.csound'
        'comment.block.csound'
        'punctuation.definition.comment.begin.csound'
      ]
      expect(tokens[2]).toEqual value: '*/', scopes: [
        'source.csound'
        'comment.block.csound'
        'punctuation.definition.comment.end.csound'
      ]
      expect(tokens[3]).toEqual value: '"', scopes: [
        'source.csound'
        'string.quoted.include.csound'
        'punctuation.definition.string.begin.csound'
      ]
      expect(tokens[4]).toEqual value: 'file.udo', scopes: [
        'source.csound'
        'string.quoted.include.csound'
      ]
      expect(tokens[5]).toEqual value: '"', scopes: [
        'source.csound'
        'string.quoted.include.csound'
        'punctuation.definition.string.end.csound'
      ]

    it 'tokenizes macro definitions', ->
      lines = grammar.tokenizeLines '# \tdefine/**/MACRO(ARGUMENT)/**/#$ARGUMENT#'
      tokens = lines[0]
      expect(tokens[0]).toEqual value: '# \tdefine', scopes: [
        'source.csound'
        'keyword.define.preprocessor.csound'
      ]
      expect(tokens[1]).toEqual value: '/*', scopes: [
        'source.csound'
        'comment.block.csound'
        'punctuation.definition.comment.begin.csound'
      ]
      expect(tokens[2]).toEqual value: '*/', scopes: [
        'source.csound'
        'comment.block.csound'
        'punctuation.definition.comment.end.csound'
      ]
      expect(tokens[3]).toEqual value: 'MACRO', scopes: [
        'source.csound'
        'entity.name.function.preprocessor.csound'
      ]
      expect(tokens[4]).toEqual value: '(', scopes: [
        'source.csound'
      ]
      expect(tokens[5]).toEqual value: 'ARGUMENT', scopes: [
        'source.csound'
        'variable.parameter.preprocessor.csound'
      ]
      expect(tokens[6]).toEqual value: ')', scopes: [
        'source.csound'
      ]
      expect(tokens[7]).toEqual value: '/*', scopes: [
        'source.csound'
        'comment.block.csound'
        'punctuation.definition.comment.begin.csound'
      ]
      expect(tokens[8]).toEqual value: '*/', scopes: [
        'source.csound'
        'comment.block.csound'
        'punctuation.definition.comment.end.csound'
      ]
      expect(tokens[9]).toEqual value: '#', scopes: [
        'source.csound'
        'punctuation.definition.macro.begin.csound'
      ]
      expect(tokens[10]).toEqual value: '$ARGUMENT', scopes: [
        'source.csound'
        'entity.name.function.preprocessor.csound'
      ]
      expect(tokens[11]).toEqual value: '#', scopes: [
        'source.csound'
        'punctuation.definition.macro.end.csound'
      ]

    it 'tokenizes global values', ->
      globalValues = [
        '0dbfs'
        'kr'
        'ksmps'
