private static string PresentExpression(
            [NotNull] PrefixExpressionContext context, [NotNull] string postfixText, out TextRange range)
        {
            var text = context.Expression.GetText();

            range = context.ExpressionRange.TextRange;

            if (context.Expression.Contains(context.PostfixContext.Reference))
            {
                var originalSize = text.Length;

                // "x > 0.par" => "x > 0"
                if (text.EndsWith(postfixText, StringComparison.OrdinalIgnoreCase))
                {
                    text = text.Substring(0, text.Length - postfixText.Length).TrimEnd();
                }

                var delta = originalSize - text.Length;
                if (delta >= 0)
                {
                    range = range.ExtendRight(-delta);
                }
            }

            text = text.ReplaceNewLines().TrimStart();

            while (true) // "aa\n         && bb" => "aa && bb"
            {
                var reduced = text.Replace("  ", " ");
                if (reduced.Length < text.Length)
                {
                    text = reduced;
                }
                else
                {
                    break;
                }
            }

            const int textLength = 50;

            if (text.Length > textLength)
            {
                text = text.Substring(0, textLength) + "…";
            }

            return(text);
        }
        protected override void AfterCompletion(
      ITextControl textControl, ISolution solution, Suffix suffix,
      TextRange resultRange, string targetText, int caretOffset)
        {
            var placeholders = new List<TextRange>();
              for (var index = 0;; index++)
              {
            index = targetText.IndexOf(NamePlaceholder, index, StringComparison.Ordinal);
            if (index == -1) break;

            var range = new TextRange(resultRange.StartOffset + index);
            placeholders.Add(range.ExtendRight(NamePlaceholder.Length));
              }

              if (placeholders.Count == 0)
              {
            base.AfterCompletion(textControl, solution, suffix, resultRange, targetText, caretOffset);
              }
              else
              {
            var nameField = new TemplateField("name", new NameSuggestionsExpression(myNames), 0);
            var hotspotInfo = new HotspotInfo(nameField, placeholders);
            var endRange = new TextRange(resultRange.StartOffset + caretOffset);

            var session = LiveTemplatesManager.Instance.CreateHotspotSessionAtopExistingText(
              mySolution, endRange, textControl, LiveTemplatesManager.EscapeAction.LeaveTextAndCaret, hotspotInfo);

            if (!suffix.IsEmpty)
            {
              session.HotspotUpdated += delegate
              {
            if (session.IsFinished)
              suffix.Playback(textControl);
              };
            }

            session.Execute();
              }
        }
        private static string PresentExpression(
      [NotNull] PrefixExpressionContext context, [NotNull] string postfixText, out TextRange range)
        {
            var text = context.Expression.GetText();
              range = context.ExpressionRange.TextRange;

              if (context.Expression.Contains(context.PostfixContext.Reference))
              {
            var originalSize = text.Length;

            // "x > 0.par" => "x > 0"
            if (text.EndsWith(postfixText, StringComparison.OrdinalIgnoreCase))
              text = text.Substring(0, text.Length - postfixText.Length).TrimEnd();

            var delta = originalSize - text.Length;
            if (delta >= 0) range = range.ExtendRight(-delta);
              }

              text = text.ReplaceNewLines().TrimStart();

              while (true) // "aa\n         && bb" => "aa && bb"
              {
            var reduced = text.Replace("  ", " ");
            if (reduced.Length < text.Length) text = reduced;
            else break;
              }

              const int textLength = 50;
              if (text.Length > textLength)
              {
            text = text.Substring(0, textLength) + "…";
              }

              return text;
        }