Exemplo n.º 1
0
        private TextFieldInfo addRelativeToQuerySpan(QueryTextSpan querySpan, long workspaceId, ISpan spanToAdd, IImmutableList <ISpan> spansToReuse)
        {
            var spanBuilder            = ImmutableList.CreateBuilder <ISpan>();
            var indexOfQueryingSpan    = spansToReuse.IndexOf(querySpan);
            var spansBeforeReplacement = spansToReuse.Take(indexOfQueryingSpan);
            var spansAfterReplacement  = spansToReuse.Skip(indexOfQueryingSpan + 1);

            spanBuilder.AddRange(spansBeforeReplacement);

            if (spanToAdd is TextSpan textSpan)
            {
                var indexToSplit           = querySpan.CursorPosition;
                var textBeforeInsertedSpan = querySpan.Text.Substring(0, indexToSplit);
                var textAfterInsertedSpan  = querySpan.Text.Substring(indexToSplit, querySpan.Text.Length - indexToSplit);

                var newQuerySpanText = $"{textBeforeInsertedSpan}{textSpan.Text}{textAfterInsertedSpan}";
                var newTextSpan      = new QueryTextSpan(newQuerySpanText, newQuerySpanText.Length);
                spanBuilder.Add(newTextSpan);
            }
            else
            {
                var indexOfProjectQuerySymbolInSpan = querySpan.Text.IndexOfAny(ValidQuerySymbols());
                var substringLength  = indexOfProjectQuerySymbolInSpan >= 0 ? indexOfProjectQuerySymbolInSpan : querySpan.Text.Length;
                var newQuerySpanText = querySpan.Text.Substring(0, substringLength);

                var newTextSpan = new TextSpan(newQuerySpanText);
                spanBuilder.Add(newTextSpan);
                spanBuilder.Add(spanToAdd);
                spanBuilder.Add(new QueryTextSpan());
            }

            spanBuilder.AddRange(spansAfterReplacement);

            return(new TextFieldInfo(workspaceId, spanBuilder.ToImmutable()));
        }
Exemplo n.º 2
0
        private static QueryInfo?searchByQuerySymbols(QueryTextSpan span, TextFieldInfo info)
        {
            var validQuerySymbols = info.ValidQuerySymbols();
            var text = span.Text;

            var possibleIndexOfQuerySymbol =
                text.Substring(0, span.CursorPosition)
                .Select((character, index) => ((int?)index, character))
                .Where(tuple => validQuerySymbols.Contains(tuple.Item2))
                .Select(tuple => tuple.Item1)
                .FirstOrDefault(querySymbolIndex =>
            {
                var previousIndex      = querySymbolIndex.Value - 1;
                var isValidSymbolIndex = previousIndex < 0 || Char.IsWhiteSpace(text[previousIndex]);

                return(isValidSymbolIndex);
            });

            if (possibleIndexOfQuerySymbol == null)
            {
                return(null);
            }

            var indexOfQuerySymbol = possibleIndexOfQuerySymbol.Value;
            var startingIndex      = indexOfQuerySymbol + 1;
            var stringLength       = text.Length - indexOfQuerySymbol - 1;
            var type      = getSuggestionType(text[indexOfQuerySymbol]);
            var queryText = text.Substring(startingIndex, stringLength);

            return(new QueryInfo(queryText, type));
        }
Exemplo n.º 3
0
        private TextFieldInfo removeQuery(QueryTextSpan currentQuerySpan, char querySymbol)
        {
            var newQuerySpan = currentQuerySpan.WithoutQueryForSymbol(querySymbol);

            var spansToReuse = Spans.Replace(currentQuerySpan, newQuerySpan);

            return(ReplaceSpans(spansToReuse));
        }