private ITagSpan <ClassificationTag> CreateTagSpanForTag(ITextSnapshot snapShot, IMappingTagSpan <GherkinTokenTag> tagSpan) { NormalizedSnapshotSpanCollection tagSpans = tagSpan.Span.GetSpans(snapShot); GherkinTokenType classificationType = tagSpan.Tag.Type; return(new TagSpan <ClassificationTag>(tagSpans[0], new ClassificationTag(gherkinTypes[classificationType]))); }
private static IEnumerable<Tuple<SnapshotSpan, TagSpan<GherkinTokenTag>>> HandleText( SnapshotSpan span, GherkinTokenType tokenType, string surroundingText) { var str = span.GetText().TrimEnd(WhiteSpaces.Chars); var idx = str.IndexOf(surroundingText, StringComparison.InvariantCulture); var idx2 = str.LastIndexOf(surroundingText, StringComparison.InvariantCulture); if (idx == -1 || idx2 == -1) yield break; ITextSnapshotLine containingLine = span.Start.GetContainingLine(); var tokenSpan = new SnapshotSpan(span.Snapshot, new Span(containingLine.Start.Position + idx, idx2 - idx + 1)); var tagSpan = new TagSpan<GherkinTokenTag>(tokenSpan, new GherkinTokenTag(tokenType)); yield return new Tuple<SnapshotSpan, TagSpan<GherkinTokenTag>>(tokenSpan, tagSpan); }
private static IEnumerable <Tuple <SnapshotSpan, TagSpan <GherkinTokenTag> > > HandleText( SnapshotSpan span, GherkinTokenType tokenType, string surroundingText) { var str = span.GetText().TrimEnd(WhiteSpaces.Chars); var idx = str.IndexOf(surroundingText, StringComparison.InvariantCulture); var idx2 = str.LastIndexOf(surroundingText, StringComparison.InvariantCulture); if (idx == -1 || idx2 == -1) { yield break; } ITextSnapshotLine containingLine = span.Start.GetContainingLine(); var tokenSpan = new SnapshotSpan(span.Snapshot, new Span(containingLine.Start.Position + idx, idx2 - idx + 1)); var tagSpan = new TagSpan <GherkinTokenTag>(tokenSpan, new GherkinTokenTag(tokenType)); yield return(new Tuple <SnapshotSpan, TagSpan <GherkinTokenTag> >(tokenSpan, tagSpan)); }
public GherkinTokenTag(GherkinTokenType type) { Type = type; }
private Tuple <SnapshotSpan, TagSpan <GherkinTokenTag> > CreateTag(Token token, SnapshotSpan span, GherkinTokenType tokenType, string text) { foreach (var row in token.Content.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries)) { string rowText = row.Trim(WhiteSpaces.Chars); var idx = text.IndexOf(rowText, StringComparison.Ordinal); if (idx == -1) { continue; } ITextSnapshotLine containingLine = span.Start.GetContainingLine(); var tokenSpan = new SnapshotSpan(span.Snapshot, new Span(containingLine.Start.Position + idx, rowText.Length)); var tagSpan = new TagSpan <GherkinTokenTag>(tokenSpan, new GherkinTokenTag(tokenType)); return(new Tuple <SnapshotSpan, TagSpan <GherkinTokenTag> >(tokenSpan, tagSpan)); } return(null); }
private IEnumerable <Tuple <SnapshotSpan, TagSpan <GherkinTokenTag> > > HandleTitle(SnapshotSpan span, Token token, GherkinTokenType tokenType) { var spanText = span.GetText(); var tokenText = token.Content.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries).Select(_ => _.Trim(WhiteSpaces.Chars)).ToList(); foreach (var row in tokenText) { var idx = spanText.IndexOf(row, StringComparison.CurrentCulture); if (idx == -1) { continue; } ITextSnapshotLine containingLine = span.Start.GetContainingLine(); var tokenSpan = new SnapshotSpan(span.Snapshot, new Span(containingLine.Start.Position + idx, row.Length)); var tagSpan = new TagSpan <GherkinTokenTag>(tokenSpan, new GherkinTokenTag(tokenType)); yield return(new Tuple <SnapshotSpan, TagSpan <GherkinTokenTag> >(tokenSpan, tagSpan)); } }
private Tuple <SnapshotSpan, TagSpan <GherkinTokenTag> > HandleType(SnapshotSpan span, Token token, GherkinTokenType tokenType) { var text = span.GetText(); if (text.TrimStart(WhiteSpaces.Chars).StartsWith(token.Content)) { var idx = text.IndexOf(token.Content, StringComparison.Ordinal); ITextSnapshotLine containingLine = span.Start.GetContainingLine(); var tokenSpan = new SnapshotSpan(span.Snapshot, new Span(containingLine.Start.Position + idx, token.Content.Length)); var tagSpan = new TagSpan <GherkinTokenTag>(tokenSpan, new GherkinTokenTag(tokenType)); return(new Tuple <SnapshotSpan, TagSpan <GherkinTokenTag> >(tokenSpan, tagSpan)); } return(null); }
private IEnumerable <Tuple <SnapshotSpan, TagSpan <GherkinTokenTag> > > HandleTag(SnapshotSpan span, GherkinParseEvent evt, GherkinTokenType tokenType, GherkinTokenType tokenTitleType) { if (!evt.Tokens.Any()) { yield break; } var t1 = HandleType(span, evt.Tokens.First(), tokenType); if (t1 != null) { yield return(t1); } if (evt.Tokens.Count >= 2) { var t2 = HandleTitle(span, evt.Tokens[1], tokenTitleType); foreach (var tuple in t2) { yield return(tuple); } } }
private IEnumerable<Tuple<SnapshotSpan, TagSpan<GherkinTokenTag>>> HandleTag(SnapshotSpan span, GherkinParseEvent evt, GherkinTokenType tokenType, GherkinTokenType tokenTitleType) { if (!evt.Tokens.Any()) yield break; var t1 = HandleType(span, evt.Tokens.First(), tokenType); if (t1 != null) yield return t1; if (evt.Tokens.Count >= 2) { var t2 = HandleTitle(span, evt.Tokens[1], tokenTitleType); foreach (var tuple in t2) yield return tuple; } }
private IEnumerable <Tuple <SnapshotSpan, TagSpan <GherkinTokenTag> > > TableItem(SnapshotSpan span, GherkinTokenType tokenType) { return(HandleText(span, tokenType, "|")); }
private Tuple<SnapshotSpan, TagSpan<GherkinTokenTag>> CreateTag(Token token, SnapshotSpan span, GherkinTokenType tokenType, string text) { foreach (var row in token.Content.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries)) { string rowText = row.Trim(WhiteSpaces.Chars); var idx = text.IndexOf(rowText, StringComparison.Ordinal); if (idx == -1) continue; ITextSnapshotLine containingLine = span.Start.GetContainingLine(); var tokenSpan = new SnapshotSpan(span.Snapshot, new Span(containingLine.Start.Position + idx, rowText.Length)); var tagSpan = new TagSpan<GherkinTokenTag>(tokenSpan, new GherkinTokenTag(tokenType)); return new Tuple<SnapshotSpan, TagSpan<GherkinTokenTag>>(tokenSpan, tagSpan); } return null; }
private IEnumerable<Tuple<SnapshotSpan, TagSpan<GherkinTokenTag>>> TableItem(SnapshotSpan span, GherkinTokenType tokenType) { return HandleText(span, tokenType, "|"); }
private Tuple<SnapshotSpan, TagSpan<GherkinTokenTag>> HandleType(SnapshotSpan span, Token token, GherkinTokenType tokenType) { var text = span.GetText(); if (text.TrimStart(WhiteSpaces.Chars).StartsWith(token.Content)) { var idx = text.IndexOf(token.Content, StringComparison.Ordinal); ITextSnapshotLine containingLine = span.Start.GetContainingLine(); var tokenSpan = new SnapshotSpan(span.Snapshot, new Span(containingLine.Start.Position + idx, token.Content.Length)); var tagSpan = new TagSpan<GherkinTokenTag>(tokenSpan, new GherkinTokenTag(tokenType)); return new Tuple<SnapshotSpan, TagSpan<GherkinTokenTag>>(tokenSpan, tagSpan); } return null; }
private IEnumerable<Tuple<SnapshotSpan, TagSpan<GherkinTokenTag>>> HandleTitle(SnapshotSpan span, Token token, GherkinTokenType tokenType) { var spanText = span.GetText(); var tokenText = token.Content.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries).Select(_ => _.Trim(WhiteSpaces.Chars)).ToList(); foreach (var row in tokenText) { var idx = spanText.IndexOf(row, StringComparison.CurrentCulture); if (idx == -1) continue; ITextSnapshotLine containingLine = span.Start.GetContainingLine(); var tokenSpan = new SnapshotSpan(span.Snapshot, new Span(containingLine.Start.Position + idx, row.Length)); var tagSpan = new TagSpan<GherkinTokenTag>(tokenSpan, new GherkinTokenTag(tokenType)); yield return new Tuple<SnapshotSpan, TagSpan<GherkinTokenTag>>(tokenSpan, tagSpan); } }
public GherkinParseEvent(GherkinTokenType gherkinTokenType, params Token[] tokens) { GherkinTokenType = gherkinTokenType; Tokens = tokens.ToList(); }
public GherkinTokenTag(GherkinTokenType type) { Type = type; }
public GherkinParseEvent(GherkinTokenType gherkinTokenType, params Token[] tokens) { GherkinTokenType = gherkinTokenType; Tokens = tokens.ToList(); }