private void ProcessTokenSpan(SnapshotSpan tokenSpan, TokenBuilder tokenBuilder, StatementBuilder statementBuilder) { var tokenTags = ProcessToken(tokenSpan); tokenBuilder.Position += tokenTags.Consumed; // Track preprocessors, but don't process them in our statements if (tokenTags.ClassifierTagSpan != null && tokenTags.ClassifierTagSpan.Tag.TokenType.IsPreprocessor()) { var preprocessorTagSpan = new TagSpan <IGLSLTag>(tokenTags.ClassifierTagSpan.Span, tokenTags.ClassifierTagSpan.Tag); _statements.Append(preprocessorTagSpan); } else { var token = tokenSpan.GetText(); statementBuilder.AppendTokenTags(tokenTags); // Process the statement once we encounter either a ';' or '{' character if ((tokenTags.ClassifierTagSpan != null && tokenTags.ClassifierTagSpan.Tag.TokenType == GLSLTokenTypes.Semicolon) || token == "{") { var statement = statementBuilder.ProcessStatement(_bracketTagger, _functionTagger, _variableTagger); _statements.Append(statement); } } }