/// <summary>
        /// Highlights the tokens in the given lines in the given document.
        /// </summary>
        /// <param name="document">The document being highlighted.</param>
        /// <param name="lines">The lines to highlight.</param>
        public void MarkTokens(IDocument document, List <LineSegment> lines)
        {
            Dictionary <Int32, List <IToken> > dicTokens = new Dictionary <int, List <IToken> >();
            AntlrLexerBase lex = LexerFactory.CreateLexer(document.TextContent, new ErrorTracker());

            for (IToken tknToken = lex.NextToken(); tknToken.Type > -1; tknToken = lex.NextToken())
            {
                if (!dicTokens.ContainsKey(tknToken.Line - 1))
                {
                    dicTokens[tknToken.Line - 1] = new List <IToken>();
                }
                dicTokens[tknToken.Line - 1].Add(tknToken);
            }
            foreach (LineSegment lsgLine in lines)
            {
                lsgLine.Words = new List <TextWord>();
                if (dicTokens.ContainsKey(lsgLine.LineNumber))
                {
                    foreach (IToken tknToken in dicTokens[lsgLine.LineNumber])
                    {
                        HandleToken(document, tknToken);
                    }
                }
                document.RequestUpdate(new TextAreaUpdate(TextAreaUpdateType.SingleLine, lsgLine.LineNumber));
            }
        }