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; }