public TokenTagCollection Match(SnapshotSpan span) { var tokenTags = new TokenTagCollection(span); string token = span.GetText(); int position = span.Start + token.Length; if (_builtInTokens.Contains(token)) { tokenTags.SetClassifierTag(BUILT_IN_TOKEN_TYPE); } else if (IsFloatingConstant(token)) { tokenTags.SetClassifierTag(FLOAT_TOKEN_TYPE); } else if (IsIntegerConstant(token)) { var isFloat = false; // Now that we have matched with an integer, look ahead to see if we are followed by a decimal if (span.Snapshot.GetText(span.End, 1) == ".") { var nConsumed = 1; var text = span.Snapshot.GetText(); for (var i = span.End.Position + 1; i < text.Length; i++) { if (char.IsNumber(text[i])) { isFloat = true; nConsumed++; } else if (text[i] == 'f' || text[i] == 'F') { nConsumed++; break; } else if (text[i] == 'l') { if (text[i + 1] == 'f' || text[i + 1] == 'F') { nConsumed += 2; } else { isFloat = false; } break; } else { break; } } if (isFloat) { tokenTags.ClassifierTagSpan = new TagSpan <GLSLClassifierTag>(span.Extended(nConsumed), new GLSLClassifierTag(FLOAT_TOKEN_TYPE)); } } if (!isFloat) { tokenTags.SetClassifierTag(INT_TOKEN_TYPE); } } return(tokenTags); }