private static void TestScanner(string line, TestTokenInfo[] tokens)
        {
            var scanner = new HamlScanner();

            string testLine = "";
            foreach (TestTokenInfo token in tokens)
            {
                token.StartIndex = testLine.Length;
                token.EndIndex = token.StartIndex + token.Token.Length -1;
                testLine += token.Token;
            }
            Assert.AreEqual(line, testLine, "Test line doesn't match tokens");

            scanner.SetSource(line, 0);

            var tokenInfo = new TokenInfo();
            int state = 0;

            int tokenNum = 0;
            while (scanner.ScanTokenAndProvideInfoAboutIt(tokenInfo, ref state))
            {
                TestTokenInfo token = tokens[tokenNum];
                AssertAreEqual(token, tokenInfo, string.Format("Token {0}({1})", tokenNum, token.Token));
                tokenNum++;
            }

            Assert.AreEqual(tokens.Length, tokenNum, "Should have matched {0} tokens but actually matched {1}", tokens.Length, tokenNum);
        }
 /// <summary>
 /// Create and return instantiation of a parser represented by RegularExpressionScanner object.
 /// </summary>
 /// <param name="buffer">An <see cref="IVsTextLines"/> represents lines of source to parse.</param>
 /// <returns>Returns a RegularExpressionScanner object</returns>
 public override IScanner GetScanner(IVsTextLines buffer)
 {
     if (_scanner == null)
     {
         _scanner = new HamlScanner();
     }
     return _scanner;
 }