public TokenTagCollection Match(SnapshotSpan span) { _builder.Snapshot = span.Snapshot; var tokenTags = new TokenTagCollection(span); string token = span.GetText(); int position = span.Start + token.Length; if (token.StartsWith("#")) { int start = position - token.Length; if (!_builder.Start.HasValue) { _builder.Start = start; string text = span.Snapshot.GetText(); int nConsumed = _builder.ConsumeUntil(text, start, "\r", "\n"); if (nConsumed >= 0) { _builder.End = _builder.Start + nConsumed; var preprocessorSpan = _builder.ToSpan(); _builder.Clear(); _spans.Add(preprocessorSpan); tokenTags.Consumed = preprocessorSpan.Length - token.Length; tokenTags.ClassifierTagSpan = new TagSpan <GLSLClassifierTag>(preprocessorSpan, new GLSLClassifierTag(TOKEN_TYPE)); } } } return(tokenTags); }
public void Clear() { _parenthesisSpans.Clear(); _curlyBracketSpans.Clear(); _squareBracketSpans.Clear(); _parenthesisBuilder.Clear(); _curlyBracketBuilder.Clear(); _squareBracketBuilder.Clear(); _rootScope = null; }
private SnapshotSpan?GetSpan(SpanBuilder spanBuilder, string text, int position, char openingChar, char closingChar) { if (!spanBuilder.Start.HasValue) { spanBuilder.Start = position; int end = GetClosingPosition(text, position, openingChar, closingChar, spanBuilder); if (end >= 0) { spanBuilder.End = end + 1; var span = spanBuilder.ToSpan(); spanBuilder.Clear(); return(span); } } return(null); }
public TokenTagCollection Match(SnapshotSpan span) { _singleLineCommentBuilder.Snapshot = span.Snapshot; _multiLineCommentBuilder.Snapshot = span.Snapshot; var tokenTags = new TokenTagCollection(span); string token = span.GetText(); int position = span.Start + token.Length; if (token.Contains("//")) { int tokenIndex = token.IndexOf("//"); int start = position - token.Length + tokenIndex; if (!_singleLineCommentBuilder.Start.HasValue) { _singleLineCommentBuilder.Start = start; string text = span.Snapshot.GetText(); int end = _singleLineCommentBuilder.ConsumeUntil(text, start, "\r", "\n"); if (end >= 0) { _singleLineCommentBuilder.End = end; var commentSpan = _singleLineCommentBuilder.ToSpan(); _singleLineCommentBuilder.Clear(); var commentTagSpan = new TagSpan <GLSLClassifierTag>(commentSpan, new GLSLClassifierTag(TOKEN_TYPE)); _singleLineComments.Add(commentTagSpan); tokenTags.Consumed = commentSpan.Length - token.Length; } } } if (token.Contains("/*")) { int tokenIndex = token.IndexOf("/*"); int start = position - token.Length + tokenIndex; if (!_multiLineCommentBuilder.Start.HasValue) { _multiLineCommentBuilder.Start = start; string text = span.Snapshot.GetText(); int end = _multiLineCommentBuilder.ConsumeUntil(text, start, "*/"); if (end >= 0) { _multiLineCommentBuilder.End = end + 1; var commentSpan = _multiLineCommentBuilder.ToSpan(); _multiLineCommentBuilder.Clear(); var commentTagSpan = new TagSpan <IGLSLTag>(commentSpan, new GLSLClassifierTag(TOKEN_TYPE)); _multiLineComments.Add(commentTagSpan); int outlineEnd = _multiLineCommentBuilder.ConsumeUntil(text, start, "\r", "\n"); if (outlineEnd >= 0) { var outlineTagSpan = new TagSpan <IGLSLTag>(commentSpan, new GLSLOutlineTag(TOKEN_TYPE, text.Substring(start, outlineEnd - start) + "...*/")); _multiLineComments.Add(outlineTagSpan); } tokenTags.Consumed = commentSpan.Length - token.Length; } } } tokenTags.SetClassifierTag(_singleLineComments); tokenTags.SetClassifierTag(_multiLineComments.OfType <TagSpan <GLSLClassifierTag> >()); tokenTags.AddOutlineTagSpans(_multiLineComments.OfType <TagSpan <GLSLOutlineTag> >()); return(tokenTags); }