Beispiel #1
0
        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])));
        }
Beispiel #2
0
 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);
 }
Beispiel #3
0
        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));
        }
Beispiel #4
0
 public GherkinTokenTag(GherkinTokenType type)
 {
     Type = type;
 }
Beispiel #5
0
 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);
 }
Beispiel #6
0
        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));
            }
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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);
                }
            }
        }
Beispiel #9
0
 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;
     }
 }
Beispiel #10
0
 private IEnumerable <Tuple <SnapshotSpan, TagSpan <GherkinTokenTag> > > TableItem(SnapshotSpan span, GherkinTokenType tokenType)
 {
     return(HandleText(span, tokenType, "|"));
 }
Beispiel #11
0
 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;
 }
Beispiel #12
0
 private IEnumerable<Tuple<SnapshotSpan, TagSpan<GherkinTokenTag>>> TableItem(SnapshotSpan span, GherkinTokenType tokenType)
 {
     return HandleText(span, tokenType, "|");
 }
Beispiel #13
0
 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;
 }
Beispiel #14
0
        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();
 }
Beispiel #16
0
 public GherkinTokenTag(GherkinTokenType type)
 {
     Type = type;
 }
Beispiel #17
0
 public GherkinParseEvent(GherkinTokenType gherkinTokenType, params Token[] tokens)
 {
     GherkinTokenType = gherkinTokenType;
     Tokens           = tokens.ToList();
 }